From bb6a1e8c349075f40ac96be25509951ad5dce715 Mon Sep 17 00:00:00 2001 From: SlRvb <54087190+SlRvb@users.noreply.github.com> Date: Thu, 12 Aug 2021 20:46:23 -0700 Subject: [PATCH 001/695] Add SlRvb Site to Showcase --- content/moc/showcase.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/content/moc/showcase.md b/content/moc/showcase.md index 00fb18cc..e1cb9a19 100644 --- a/content/moc/showcase.md +++ b/content/moc/showcase.md @@ -10,5 +10,6 @@ Want to see what Quartz can do? Here are some cool community gardens :) - [Anson Yu's Garden](http://garden.ansonyu.me/) - [Shihyu's PKM](https://shihyuho.github.io/pkm/) - [Chloe's Garden](https://garden.chloeabrasada.online/) +- [SlRvb's Site](https://slrvb.github.io/Site/) -If you want to see your own on here, submit a [Pull Request adding yourself to this file](https://github.com/jackyzha0/quartz/blob/hugo/content/moc/showcase.md)! \ No newline at end of file +If you want to see your own on here, submit a [Pull Request adding yourself to this file](https://github.com/jackyzha0/quartz/blob/hugo/content/moc/showcase.md)! From f9920f6d736754372075c8f1014ab9440e333317 Mon Sep 17 00:00:00 2001 From: Brecht Savelkoul Date: Fri, 13 Aug 2021 22:46:00 +0200 Subject: [PATCH 002/695] Execute darkmode script before first render --- assets/darkmode.js | 19 +++++++++++-------- layouts/404.html | 8 +------- layouts/_default/single.html | 9 +-------- layouts/index.html | 8 +------- layouts/partials/head.html | 8 +++++++- 5 files changed, 21 insertions(+), 31 deletions(-) diff --git a/assets/darkmode.js b/assets/darkmode.js index 93bf6dac..d95a281a 100644 --- a/assets/darkmode.js +++ b/assets/darkmode.js @@ -1,14 +1,8 @@ -// Darkmode toggle -const toggleSwitch = document.querySelector('#darkmode-toggle') - const userPref = window.matchMedia('(prefers-color-scheme: light)').matches ? 'light' : 'dark' const currentTheme = localStorage.getItem('theme') ?? userPref if (currentTheme) { document.documentElement.setAttribute('saved-theme', currentTheme); - if (currentTheme === 'dark') { - toggleSwitch.checked = true - } } const switchTheme = (e) => { @@ -22,5 +16,14 @@ const switchTheme = (e) => { } } -// listen for toggle -toggleSwitch.addEventListener('change', switchTheme, false) \ No newline at end of file +window.addEventListener('DOMContentLoaded', () => { + // Darkmode toggle + const toggleSwitch = document.querySelector('#darkmode-toggle') + + // listen for toggle + toggleSwitch.addEventListener('change', switchTheme, false) + + if (currentTheme === 'dark') { + toggleSwitch.checked = true + } +}) diff --git a/layouts/404.html b/layouts/404.html index 84949101..deec3eb6 100644 --- a/layouts/404.html +++ b/layouts/404.html @@ -11,12 +11,6 @@ ↳ Let's get you home. - -{{- with resources.Get "darkmode.js" | minify -}} - -{{- end -}} - \ No newline at end of file + diff --git a/layouts/_default/single.html b/layouts/_default/single.html index 14a3b05d..9e647ffa 100644 --- a/layouts/_default/single.html +++ b/layouts/_default/single.html @@ -18,13 +18,6 @@ {{partial "footer.html" .}} - -{{- with resources.Get "darkmode.js" | minify -}} - -{{- end -}} - - \ No newline at end of file + diff --git a/layouts/index.html b/layouts/index.html index 83f6fb8a..fdc03b1f 100644 --- a/layouts/index.html +++ b/layouts/index.html @@ -13,10 +13,4 @@ {{partial "footer.html" .}} - -{{- with resources.Get "darkmode.js" | minify -}} - -{{- end -}} -{{end}} \ No newline at end of file +{{end}} diff --git a/layouts/partials/head.html b/layouts/partials/head.html index e53ebe1d..3810078c 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -17,5 +17,11 @@ {{end}} {{end}} + + {{- with resources.Get "darkmode.js" | minify -}} + + {{- end -}} -{{ template "_internal/google_analytics.html" . }} \ No newline at end of file +{{ template "_internal/google_analytics.html" . }} From ae2f7efde0eb997ab2f7be1cf1513af7f99df599 Mon Sep 17 00:00:00 2001 From: jackyzha0 Date: Sat, 28 Aug 2021 20:58:14 -0400 Subject: [PATCH 003/695] update showcase --- content/moc/showcase.md | 1 + 1 file changed, 1 insertion(+) diff --git a/content/moc/showcase.md b/content/moc/showcase.md index e1cb9a19..20e6a14d 100644 --- a/content/moc/showcase.md +++ b/content/moc/showcase.md @@ -11,5 +11,6 @@ Want to see what Quartz can do? Here are some cool community gardens :) - [Shihyu's PKM](https://shihyuho.github.io/pkm/) - [Chloe's Garden](https://garden.chloeabrasada.online/) - [SlRvb's Site](https://slrvb.github.io/Site/) +- [Course notes for Information Technology Advanced Theory](https://a2itnotes.github.io/quartz/) If you want to see your own on here, submit a [Pull Request adding yourself to this file](https://github.com/jackyzha0/quartz/blob/hugo/content/moc/showcase.md)! From 071984a12d1c7887d0ef41b206e01bc5afefb95d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20Rodr=C3=ADguez?= Date: Tue, 31 Aug 2021 16:40:31 -0500 Subject: [PATCH 004/695] fix product typo in external hosting section --- content/notes/hosting.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/notes/hosting.md b/content/notes/hosting.md index 7a5973c6..c6027bb9 100644 --- a/content/notes/hosting.md +++ b/content/notes/hosting.md @@ -80,6 +80,6 @@ Don't want to use GitHub Pages? Hugo builds everything for you! Everything is a Now that your Quartz is live, let's figure out how to make Quartz really *yours*! -🎨 [Customizing Quarts](notes/config.md) +🎨 [Customizing Quartz](notes/config.md) Having problems? Checkout our [FAQ and Troubleshooting guide](notes/troubleshooting.md). \ No newline at end of file From fc00ad5bffcd5a1b89a4c1cb19b12d77238cc4c2 Mon Sep 17 00:00:00 2001 From: Blake Allen Date: Fri, 22 Oct 2021 14:04:09 -0700 Subject: [PATCH 005/695] fix for notes with spaces not linking properly --- layouts/_default/single.html | 11 ++++------- layouts/partials/backlinks.html | 10 +++++++--- layouts/partials/graph.html | 4 ++-- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/layouts/_default/single.html b/layouts/_default/single.html index c30cd4fe..0025cd31 100644 --- a/layouts/_default/single.html +++ b/layouts/_default/single.html @@ -1,3 +1,6 @@ + +{{$content := replaceRE `a href="\.\.\/(.+%20.+)+"` `$1` .Content}} +{{$content = replace $content "%20" "-"}} {{ partial "head.html" . }} @@ -13,13 +16,7 @@ {{partial "darkmode.html" .}}
- {{if $.Site.Data.config.enableToc}} - - {{end}} - {{- .Content -}} + {{ $content | safeHTML }}
{{partial "footer.html" .}} diff --git a/layouts/partials/backlinks.html b/layouts/partials/backlinks.html index 2e978202..48ffecc4 100644 --- a/layouts/partials/backlinks.html +++ b/layouts/partials/backlinks.html @@ -6,9 +6,13 @@ {{$inbound := index $.Site.Data.linkIndex.index.backlinks $curPage}} {{if $inbound}} {{- range $inbound -}} -
  • - {{index . "source"}} -
  • + {{$src := index . "source"}} + {{$src = replace $src " " "-"}} + {{$src = replace $src `\` ""}} + +
  • + {{index . "source"}} +
  • {{- end -}} {{else}}
  • diff --git a/layouts/partials/graph.html b/layouts/partials/graph.html index 0e9684d6..16a9f6a1 100644 --- a/layouts/partials/graph.html +++ b/layouts/partials/graph.html @@ -126,7 +126,7 @@ .attr("fill", color) .style("cursor", "pointer") .on("click", (_, d) => { - window.location.href = {{.Site.BaseURL}} + d.id; + window.location.href = {{.Site.BaseURL}} + d.id.replace(" ", "-"); }) .on("mouseover", function (_, d) { d3.selectAll(".node") @@ -184,7 +184,7 @@ const labels = graphNode.append("text") .attr("dx", 12) .attr("dy", ".35em") - .text((d) => d.id) + .text((d) => d.id.replace("%20", "-")) .style("opacity", 0) .style("pointer-events", "none") .call(drag(simulation)); From 776ef084c9c98163f96cce62621cb8b0cf59bbdd Mon Sep 17 00:00:00 2001 From: Blake Allen Date: Fri, 22 Oct 2021 18:32:57 -0700 Subject: [PATCH 006/695] fix last commit --- layouts/_default/single.html | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/layouts/_default/single.html b/layouts/_default/single.html index 0025cd31..9193ee62 100644 --- a/layouts/_default/single.html +++ b/layouts/_default/single.html @@ -1,6 +1,6 @@ - {{$content := replaceRE `a href="\.\.\/(.+%20.+)+"` `$1` .Content}} {{$content = replace $content "%20" "-"}} +{{$content = $content | safeHTML}} {{ partial "head.html" . }} @@ -16,7 +16,13 @@ {{partial "darkmode.html" .}}
    - {{ $content | safeHTML }} + {{if $.Site.Data.config.enableToc}} + + {{end}} + {{- $content -}}
    {{partial "footer.html" .}} From e1366ecb6173b7c5e799c46e3ed8acbb50aaf447 Mon Sep 17 00:00:00 2001 From: Blake Allen Date: Fri, 22 Oct 2021 18:56:26 -0700 Subject: [PATCH 007/695] fix accidental code --- layouts/partials/backlinks.html | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/layouts/partials/backlinks.html b/layouts/partials/backlinks.html index 48ffecc4..16b96cdf 100644 --- a/layouts/partials/backlinks.html +++ b/layouts/partials/backlinks.html @@ -8,10 +8,9 @@ {{- range $inbound -}} {{$src := index . "source"}} {{$src = replace $src " " "-"}} - {{$src = replace $src `\` ""}}
  • - {{index . "source"}} + {{index . "source"}}
  • {{- end -}} {{else}} From 299533a4f47d2379ddbc209bcd6923a70a81e65d Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Sun, 24 Oct 2021 23:17:00 -0700 Subject: [PATCH 008/695] bump hugo-obsidian version --- .github/workflows/deploy.yaml | 2 +- README.md | 2 +- content/moc/directory.md | 19 ------------------- 3 files changed, 2 insertions(+), 21 deletions(-) delete mode 100644 content/moc/directory.md diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index 21901945..b36c49c6 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -12,7 +12,7 @@ jobs: - uses: actions/checkout@v2 - name: Build Link Index - uses: jackyzha0/hugo-obsidian@v2.3 + uses: jackyzha0/hugo-obsidian@v2.4 with: index: true input: content diff --git a/README.md b/README.md index 079e6c10..ec801394 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Quartz Simple second brain and digital garden. -> “He who works with the door open gets all kinds of interruptions, but he also occasionally gets clues as to what the world is and what might be important.†— Richard Hamming +> “[One] who works with the door open gets all kinds of interruptions, but [they] also occasionally gets clues as to what the world is and what might be important.†— Richard Hamming 🔗 Get Started: https://quartz.jzhao.xyz/ \ No newline at end of file diff --git a/content/moc/directory.md b/content/moc/directory.md deleted file mode 100644 index b77f2ee5..00000000 --- a/content/moc/directory.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: "Quartz Documentation" ---- - -## Setup -Welcome to Quartz! Whether you're setting up a website and project for the first time or a seasoned digital gardener, I hope that you'll find something useful about this project. - -Let's get to business and get you started! - -- 📚 [Setup your own digital garden using Quartz](notes/setup.md) -- 🔗 [Linking with an Obsidian Vault](notes/obsidian.md) -- 🎨 [Customizing and Styling Quartz](notes/config.md) -- 🌠[Hosting Quartz online!](notes/hosting.md) - -Not convinced yet? Look at some [community digital gardens](moc/showcase) built with Quartz! - -## Troubleshooting -- 🚧 [Troubleshooting and FAQ](notes/troubleshooting.md) -- 🛠[Submit an Issue](https://github.com/jackyzha0/quartz/issues) \ No newline at end of file From 6fd19069deb06988b3d34482a151a79a53b589d0 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Sun, 24 Oct 2021 23:17:13 -0700 Subject: [PATCH 009/695] search improvements --- layouts/partials/search.html | 363 ++++++++++++++++++----------------- 1 file changed, 187 insertions(+), 176 deletions(-) diff --git a/layouts/partials/search.html b/layouts/partials/search.html index e2285eab..7ee139db 100644 --- a/layouts/partials/search.html +++ b/layouts/partials/search.html @@ -1,208 +1,219 @@
    -
    - +
    +
    \ No newline at end of file From c1c061fbea8f6cdc6aec4992d21d2df73dc6ba4e Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Sun, 24 Oct 2021 23:17:20 -0700 Subject: [PATCH 010/695] bump docs --- content/_index.md | 12 ++++++++++-- content/notes/ignore-notes.md | 9 +++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/content/_index.md b/content/_index.md index b665a3de..09941245 100644 --- a/content/_index.md +++ b/content/_index.md @@ -18,6 +18,14 @@ I was really inspired by [Bianca](https://garden.bianca.digital/) and [Joel](htt **The goal of Quartz is to make hosting your own public digital garden free and simple.** You don't even need your own website. Quartz does all of that for you and gives your own little corner of the internet. ## Get Started -The entire Quartz documentation is fully hosted using Quartz! To get started, let's visit the main directory. +The entire Quartz documentation is fully hosted using Quartz! Whether you're setting up a website and project for the first time or a seasoned digital gardener, I hope that you'll find something useful about this project. -👉 [Directory](moc/directory.md) \ No newline at end of file +Let's get to business and get you started! + +> 📚 [Setup your own digital garden using Quartz](notes/setup.md) + +Not convinced yet? Look at some [community digital gardens](moc/showcase) built with Quartz! + +## Troubleshooting +- 🚧 [Troubleshooting and FAQ](notes/troubleshooting.md) +- 🛠[Submit an Issue](https://github.com/jackyzha0/quartz/issues) \ No newline at end of file diff --git a/content/notes/ignore-notes.md b/content/notes/ignore-notes.md index 49bf5f36..e0314211 100644 --- a/content/notes/ignore-notes.md +++ b/content/notes/ignore-notes.md @@ -15,6 +15,15 @@ ignoreFiles = [ ``` `ignoreFiles` supports the use of Regular Expressions (RegEx) so you can ignore patterns as well (e.g. ignoring all `.png`s by doing `\\.png$`). +To ignore a specific file, you can also add the tag `draft: true` to the frontmatter of a note. + +```markdown +--- +title: Some Private Note +draft: true +--- +... +``` More details in [Hugo's documentation](https://gohugo.io/getting-started/configuration/#ignore-content-and-data-files-when-rendering). From 22a9c0ddfcb38a15d4340f532faca7733349702b Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Sun, 24 Oct 2021 23:31:09 -0700 Subject: [PATCH 011/695] docs updates, add search to main page, fix redir bug --- README.md | 2 +- content/_index.md | 15 +++++++-------- layouts/index.html | 36 ++++++++++++++++++++++++------------ layouts/partials/search.html | 10 ++++++---- 4 files changed, 38 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index ec801394..abcfb68d 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Quartz -Simple second brain and digital garden. +Host your own second brain and digital garden for free. > “[One] who works with the door open gets all kinds of interruptions, but [they] also occasionally gets clues as to what the world is and what might be important.†— Richard Hamming diff --git a/content/_index.md b/content/_index.md index 09941245..4cfe1be1 100644 --- a/content/_index.md +++ b/content/_index.md @@ -1,7 +1,10 @@ -# 🌱 Quartz -## v2.0 +--- +title: 🪴 Quartz v2.1 +--- -Simple second brain and [digital garden](https://jzhao.xyz/posts/digital-gardening). +Host your second brain and [digital garden](https://jzhao.xyz/posts/digital-gardening) for free. + +Curious what it can do? You're on it right now! The entire Quartz documentation is fully hosted using Quartz. ## Why Quartz? Hosting a public digital garden isn't easy. There are an overwhelming number of tutorials, resources, and guides for tools like [Notion](https://www.notion.so/), [Roam](https://roamresearch.com/), and [Obsidian](https://obsidian.md/), yet none of them have super easy to use *free* tools to publish that garden to the world. @@ -11,17 +14,13 @@ I've personally found that 2. Having a public digital garden invites open conversations 3. It makes keeping personal notes and knowledge *playful and fun* -> “He who works with the door open gets all kinds of interruptions, but he also occasionally gets clues as to what the world is and what might be important.†— Richard Hamming +> “[One] who works with the door open gets all kinds of interruptions, but [they] also occasionally gets clues as to what the world is and what might be important.†— Richard Hamming I was really inspired by [Bianca](https://garden.bianca.digital/) and [Joel](https://joelhooks.com/digital-garden)'s digital gardens and wanted to try making my own. **The goal of Quartz is to make hosting your own public digital garden free and simple.** You don't even need your own website. Quartz does all of that for you and gives your own little corner of the internet. ## Get Started -The entire Quartz documentation is fully hosted using Quartz! Whether you're setting up a website and project for the first time or a seasoned digital gardener, I hope that you'll find something useful about this project. - -Let's get to business and get you started! - > 📚 [Setup your own digital garden using Quartz](notes/setup.md) Not convinced yet? Look at some [community digital gardens](moc/showcase) built with Quartz! diff --git a/layouts/index.html b/layouts/index.html index fdc03b1f..c30cd4fe 100644 --- a/layouts/index.html +++ b/layouts/index.html @@ -1,16 +1,28 @@ -{{define "head"}} + + {{ partial "head.html" . }} -{{end}} -{{define "main"}} - + +{{partial "search.html" .}}
    - {{partial "darkmode.html" .}} - {{.Content}} - - -
    - {{partial "footer.html" .}} -
    + +
    + {{if .Title}}

    {{ .Title }}

    {{end}} + Search IconIcon to open search +
    + {{partial "darkmode.html" .}} +
    +
    + {{if $.Site.Data.config.enableToc}} + + {{end}} + {{- .Content -}} +
    + {{partial "footer.html" .}}
    -{{end}} + + + diff --git a/layouts/partials/search.html b/layouts/partials/search.html index 7ee139db..78b77653 100644 --- a/layouts/partials/search.html +++ b/layouts/partials/search.html @@ -126,13 +126,17 @@ ` } + const redir = (id, term) => { + window.location.href = {{.Site.BaseURL}} + `${id}#:~:text=${encodeURIComponent(term)}` + } + const source = document.getElementById('search-bar') const results = document.getElementById("results-container") let term source.addEventListener("keyup", (e) => { if (e.key === "Enter") { const anchor = document.getElementsByClassName("result-card")[0] - window.location.href = `${anchor.id}#:~:text=${encodeURIComponent(term)}` + redir(anchor.id, term) } }) source.addEventListener('input', (e) => { @@ -163,9 +167,7 @@ .join("\n") const anchors = document.getElementsByClassName("result-card"); [...anchors].forEach(anchor => { - anchor.onclick = () => { - window.location.href = `${anchor.id}#:~:text=${encodeURIComponent(term)}` - } + anchor.onclick = () => redir(anchor.id, term) }) } }) From f56642f13cb5bffb8c05b239c6a7b90e1b6453e5 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Sun, 24 Oct 2021 23:32:55 -0700 Subject: [PATCH 012/695] forgot string lol --- layouts/partials/search.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/layouts/partials/search.html b/layouts/partials/search.html index 78b77653..22b50a18 100644 --- a/layouts/partials/search.html +++ b/layouts/partials/search.html @@ -127,7 +127,7 @@ } const redir = (id, term) => { - window.location.href = {{.Site.BaseURL}} + `${id}#:~:text=${encodeURIComponent(term)}` + window.location.href = "{{.Site.BaseURL}}" + `${id}#:~:text=${encodeURIComponent(term)}` } const source = document.getElementById('search-bar') From 1835b97a7a2faf23809bb39d0bec7a2b77b3b81c Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Sun, 24 Oct 2021 23:45:55 -0700 Subject: [PATCH 013/695] better homepage --- content/_index.md | 26 +++++++------------------- content/notes/philosophy.md | 17 +++++++++++++++++ 2 files changed, 24 insertions(+), 19 deletions(-) create mode 100644 content/notes/philosophy.md diff --git a/content/_index.md b/content/_index.md index 4cfe1be1..d9815914 100644 --- a/content/_index.md +++ b/content/_index.md @@ -1,29 +1,17 @@ --- title: 🪴 Quartz v2.1 --- - -Host your second brain and [digital garden](https://jzhao.xyz/posts/digital-gardening) for free. - -Curious what it can do? You're on it right now! The entire Quartz documentation is fully hosted using Quartz. - -## Why Quartz? -Hosting a public digital garden isn't easy. There are an overwhelming number of tutorials, resources, and guides for tools like [Notion](https://www.notion.so/), [Roam](https://roamresearch.com/), and [Obsidian](https://obsidian.md/), yet none of them have super easy to use *free* tools to publish that garden to the world. - -I've personally found that -1. It's nice to access notes from anywhere -2. Having a public digital garden invites open conversations -3. It makes keeping personal notes and knowledge *playful and fun* - -> “[One] who works with the door open gets all kinds of interruptions, but [they] also occasionally gets clues as to what the world is and what might be important.†— Richard Hamming - -I was really inspired by [Bianca](https://garden.bianca.digital/) and [Joel](https://joelhooks.com/digital-garden)'s digital gardens and wanted to try making my own. - -**The goal of Quartz is to make hosting your own public digital garden free and simple.** You don't even need your own website. Quartz does all of that for you and gives your own little corner of the internet. +Host your second brain and [digital garden](https://jzhao.xyz/posts/digital-gardening) for free. Quartz features +1. Extremely fast full-text search by pressing `/` +2. Beautiful, out-of-the-box website creation and deployment +3. Display for backlinks of each note +4. A customizable graph view +5. Endlessly powerful page and theme customization ## Get Started > 📚 [Setup your own digital garden using Quartz](notes/setup.md) -Not convinced yet? Look at some [community digital gardens](moc/showcase) built with Quartz! +Not convinced yet? Look at some [community digital gardens](moc/showcase) built with Quartz, or read about [why I made Quartz](notes/philosophy.md) to begin with! ## Troubleshooting - 🚧 [Troubleshooting and FAQ](notes/troubleshooting.md) diff --git a/content/notes/philosophy.md b/content/notes/philosophy.md new file mode 100644 index 00000000..93254156 --- /dev/null +++ b/content/notes/philosophy.md @@ -0,0 +1,17 @@ +--- +title: Quartz Philosophy +--- + +> “[One] who works with the door open gets all kinds of interruptions, but [they] also occasionally gets clues as to what the world is and what might be important.†— Richard Hamming + +## Why Quartz? +Hosting a public digital garden isn't easy. There are an overwhelming number of tutorials, resources, and guides for tools like [Notion](https://www.notion.so/), [Roam](https://roamresearch.com/), and [Obsidian](https://obsidian.md/), yet none of them have super easy to use *free* tools to publish that garden to the world. + +I've personally found that +1. It's nice to access notes from anywhere +2. Having a public digital garden invites open conversations +3. It makes keeping personal notes and knowledge *playful and fun* + +I was really inspired by [Bianca](https://garden.bianca.digital/) and [Joel](https://joelhooks.com/digital-garden)'s digital gardens and wanted to try making my own. + +**The goal of Quartz is to make hosting your own public digital garden free and simple.** You don't even need your own website. Quartz does all of that for you and gives your own little corner of the internet. From f7b89db8ee85e54a438db2e2cac3c55e805281c9 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Mon, 25 Oct 2021 15:00:55 -0700 Subject: [PATCH 014/695] search fix --- layouts/partials/search.html | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/layouts/partials/search.html b/layouts/partials/search.html index 22b50a18..ce6038fb 100644 --- a/layouts/partials/search.html +++ b/layouts/partials/search.html @@ -1,7 +1,6 @@
    - +
    @@ -72,6 +71,7 @@ tokenize: "reverse", charset: "latin:extra", suggest: true, + cache: 10, }) const scrapedContent = {{$.Site.Data.contentIndex}} @@ -80,10 +80,10 @@ } const highlight = (content, term) => { - const highlightWindow = 15 + const highlightWindow = 20 const tokenizedTerm = term.split(/\s+/).filter(t => t !== "") const splitText = content.split(/\s+/).filter(t => t !== "") - const includesCheck = (token) => tokenizedTerm.some(term => token.toLowerCase().includes(term.toLowerCase())) + const includesCheck = (token) => tokenizedTerm.some(term => token.toLowerCase().startsWith(term.toLowerCase())) const occurrencesIndices = splitText .map(includesCheck) @@ -116,8 +116,7 @@ } const resultToHTML = ({url, title, content, term}) => { - const md = content.split("---")[2] - const text = removeMarkdown(md) + const text = removeMarkdown(content) const resultTitle = highlight(title, term) const resultText = highlight(text, term) return `
    diff --git a/layouts/_default/single.html b/layouts/_default/single.html index fd061e51..a84ec915 100644 --- a/layouts/_default/single.html +++ b/layouts/_default/single.html @@ -17,6 +17,11 @@

    Last updated {{if ne .Date .Lastmod}}{{ .Lastmod.Format "January 2, 2006" }}{{else}}Unknown{{end}}

    + {{if $.Site.Data.config.enableToc}}
    diff --git a/layouts/partials/graph.html b/layouts/partials/graph.html index cd5577f4..f0893569 100644 --- a/layouts/partials/graph.html +++ b/layouts/partials/graph.html @@ -146,7 +146,7 @@ .attr("fill", color) .style("cursor", "pointer") .on("click", (_, d) => { - window.location.href = {{.Site.BaseURL}} + d.id.replace(" ", "-").replace("%20", "-"); + window.location.href = {{.Site.BaseURL}} + decodeURI(d.id).replace(/[\s_]+/g, '-') }) .on("mouseover", function (_, d) { d3.selectAll(".node") @@ -204,7 +204,7 @@ const labels = graphNode.append("text") .attr("dx", 12) .attr("dy", ".35em") - .text((d) => content[d.id.replace("%20", "-")]?.title || "Untitled") + .text((d) => content[decodeURI(d.id).replace(/[\s_]+/g, '-')]?.title || "Untitled") .style("opacity", 0) .style("pointer-events", "none") .call(drag(simulation)); From 3722e600ee3bd75130e4e228ea45c2074649329c Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Mon, 27 Dec 2021 20:52:30 -0500 Subject: [PATCH 051/695] bump hugo-obsidian --- .github/workflows/deploy.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index fc3a5c23..60773590 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -12,7 +12,7 @@ jobs: - uses: actions/checkout@v2 - name: Build Link Index - uses: jackyzha0/hugo-obsidian@v2.6 + uses: jackyzha0/hugo-obsidian@v2.7 with: index: true input: content From ca886e40752a8a30762708ea87d7228f737c0cd2 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Tue, 28 Dec 2021 14:28:08 -0500 Subject: [PATCH 052/695] fix render link for apostrophe --- layouts/_default/_markup/render-link.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/layouts/_default/_markup/render-link.html b/layouts/_default/_markup/render-link.html index f37614f0..a9a6eca3 100644 --- a/layouts/_default/_markup/render-link.html +++ b/layouts/_default/_markup/render-link.html @@ -1,8 +1,8 @@ {{$trimmed := strings.TrimSuffix ".md" (.Destination | safeURL)}} -{{$trimmed = replace $trimmed "%20" "-"}} +{{$trimmed = replace $trimmed "%20" "-" }} {{$external := strings.HasPrefix $trimmed "http" }} {{ if $external }} {{ .Text | safeHTML }} {{else}} -{{ .Text | safeHTML }} +{{ .Text | safeHTML }} {{end}} \ No newline at end of file From 7507fd29912015a72f990b23023ae2946c6cd51b Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Sun, 2 Jan 2022 19:49:41 -0500 Subject: [PATCH 053/695] fix search styling --- layouts/partials/search.html | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/layouts/partials/search.html b/layouts/partials/search.html index 90f4040a..5544bc1a 100644 --- a/layouts/partials/search.html +++ b/layouts/partials/search.html @@ -190,9 +190,10 @@ // display if (finalResults.length === 0) { - results.innerHTML = `
    -

    No results.

    -
    ` + results.innerHTML = `` } else { results.innerHTML = finalResults .map(result => resultToHTML({ From 2b432d7f0b35987ca6886e7041dce861b7e21abb Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Sun, 2 Jan 2022 20:02:47 -0500 Subject: [PATCH 054/695] fix flex gap --- assets/base.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/base.scss b/assets/base.scss index c4447ee1..e31f5ebb 100644 --- a/assets/base.scss +++ b/assets/base.scss @@ -276,6 +276,7 @@ hr { .page-end { display: flex; flex-direction: row; + gap: 2em; @media all and (max-width: 780px) { flex-direction: column; @@ -289,7 +290,6 @@ hr { & > ul { list-style: none; padding-left: 0; - margin-right: 2em; & > li { margin: 0.5em 0; From 4a3c4fdef550547aa80947ebaff1bda44b943d4d Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Mon, 3 Jan 2022 13:18:31 -0500 Subject: [PATCH 055/695] popover implementation --- assets/base.scss | 33 +++++++++++++++++++++-- data/config.yaml | 4 +-- layouts/_default/_markup/render-link.html | 9 ++++--- layouts/_default/taxonomy.html | 2 +- layouts/_default/term.html | 2 +- layouts/partials/graph.html | 3 --- layouts/partials/head.html | 10 ++++++- layouts/partials/popover.html | 29 ++++++++++++++++++++ layouts/partials/search.html | 7 +++-- 9 files changed, 81 insertions(+), 18 deletions(-) create mode 100644 layouts/partials/popover.html diff --git a/assets/base.scss b/assets/base.scss index e31f5ebb..dcb0ae71 100644 --- a/assets/base.scss +++ b/assets/base.scss @@ -179,8 +179,7 @@ article { font-family: Source Sans Pro; font-weight: 600; - // internal link - &[href^="./"], &[href^="/"] { + &.internal-link { text-decoration: none; background-color: transparentize(#8f9fa9, 0.85); padding: 0 0.1em; @@ -463,4 +462,34 @@ header { opacity: 0.6; } } +} + +.popover { + z-index: 999; + position: absolute; + width: 15em; + display: inline; + background-color: var(--light); + padding: 1em; + border: 1px solid var(--outlinegray); + border-radius: 5px; + transform: translate(-50%, 40%); + opacity: 0; + pointer-events: none; + transition: opacity 0.2s ease, transform 0.2s ease; + transition-delay: 0.3s; + + &.visible { + opacity: 1; + transform: translate(-50%, 20%); + } + + & > h3 { + margin: 0.5em 0; + } + + & > p { + margin: 0; + font-weight: 400; + } } \ No newline at end of file diff --git a/data/config.yaml b/data/config.yaml index 1ca6d198..0ebe8011 100644 --- a/data/config.yaml +++ b/data/config.yaml @@ -4,9 +4,9 @@ description: Here is the page description. This is an example Quartz site that details installation, setup, customization, and troubleshooting for Quartz itself. page_title: - "🪴 Quartz v3" + "🪴 Quartz 3" links: - link_name: Twitter link: https://twitter.com/_jzhao - link_name: Github - link: https://github.com/jackyzha0 + link: https://github.com/jackyzha0 \ No newline at end of file diff --git a/layouts/_default/_markup/render-link.html b/layouts/_default/_markup/render-link.html index a9a6eca3..2bde76cd 100644 --- a/layouts/_default/_markup/render-link.html +++ b/layouts/_default/_markup/render-link.html @@ -1,8 +1,9 @@ {{$trimmed := strings.TrimSuffix ".md" (.Destination | safeURL)}} {{$trimmed = replace $trimmed "%20" "-" }} {{$external := strings.HasPrefix $trimmed "http" }} -{{ if $external }} +{{- if $external -}} {{ .Text | safeHTML }} -{{else}} -{{ .Text | safeHTML }} -{{end}} \ No newline at end of file +{{- else -}} +{{$fixedUrl := (cond (hasPrefix $trimmed "/") $trimmed (print "/" $trimmed)) | urlize}} +{{ .Text | safeHTML }} +{{- end -}} \ No newline at end of file diff --git a/layouts/_default/taxonomy.html b/layouts/_default/taxonomy.html index 45a713af..e0a1e876 100644 --- a/layouts/_default/taxonomy.html +++ b/layouts/_default/taxonomy.html @@ -17,7 +17,7 @@
    {{ range .Site.Taxonomies.tags.ByCount }}
    -

    {{ .Page.Title | humanize }}

    +

    {{ .Page.Title }}

    {{ .Count }} notes with this tag {{if gt .Count 2}}(showing first 2 results){{end}}

    {{ with ($.Site.GetPage (printf "/tags/%s" .Page.Title)) }} diff --git a/layouts/_default/term.html b/layouts/_default/term.html index fd01425b..58f024bc 100644 --- a/layouts/_default/term.html +++ b/layouts/_default/term.html @@ -13,7 +13,7 @@ {{partial "darkmode.html" .}}
    -

    Category: {{.Title | humanize}}

    +

    Tag: {{.Title | humanize}}

    {{partial "page-list.html" .Paginator.Pages}} {{ template "_internal/pagination.html" . }}
    diff --git a/layouts/partials/graph.html b/layouts/partials/graph.html index f0893569..02085625 100644 --- a/layouts/partials/graph.html +++ b/layouts/partials/graph.html @@ -11,9 +11,6 @@ } {{- end -}} + + + {{ template "_internal/google_analytics.html" . }} +{{ partial "popover.html" .}} diff --git a/layouts/partials/popover.html b/layouts/partials/popover.html new file mode 100644 index 00000000..d9cc941d --- /dev/null +++ b/layouts/partials/popover.html @@ -0,0 +1,29 @@ + \ No newline at end of file diff --git a/layouts/partials/search.html b/layouts/partials/search.html index 5544bc1a..0c853a05 100644 --- a/layouts/partials/search.html +++ b/layouts/partials/search.html @@ -89,8 +89,7 @@ } }) - const scrapedContent = {{$.Site.Data.contentIndex}} - for (const [key, value] of Object.entries(scrapedContent)) { + for (const [key, value] of Object.entries(content)) { contentIndex.add({ id: key, title: value.title, @@ -151,8 +150,8 @@ const fetch = id => ({ id, url: id, - title: scrapedContent[id].title, - content: scrapedContent[id].content + title: content[id].title, + content: content[id].content }) const source = document.getElementById('search-bar') From e49a1ac9db92c6c967be404b5a3b9e3194a4ed99 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Mon, 3 Jan 2022 13:22:04 -0500 Subject: [PATCH 056/695] made link preview optional --- data/config.yaml | 1 + layouts/partials/popover.html | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/data/config.yaml b/data/config.yaml index 0ebe8011..5759ab2e 100644 --- a/data/config.yaml +++ b/data/config.yaml @@ -1,5 +1,6 @@ name: Jacky Zhao enableToc: true +enableLinkPreview: true description: Here is the page description. This is an example Quartz site that details installation, setup, customization, and troubleshooting for Quartz itself. diff --git a/layouts/partials/popover.html b/layouts/partials/popover.html index d9cc941d..afcf4c56 100644 --- a/layouts/partials/popover.html +++ b/layouts/partials/popover.html @@ -1,3 +1,4 @@ +{{if $.Site.Data.config.enableLinkPreview}} \ No newline at end of file + +{{end}} \ No newline at end of file From 4e639979f8175b0a639ba2e25bbd8fa550d728bf Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Mon, 3 Jan 2022 15:36:58 -0500 Subject: [PATCH 057/695] fix copy selection --- assets/base.scss | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/assets/base.scss b/assets/base.scss index dcb0ae71..1ed1dffd 100644 --- a/assets/base.scss +++ b/assets/base.scss @@ -478,6 +478,7 @@ header { pointer-events: none; transition: opacity 0.2s ease, transform 0.2s ease; transition-delay: 0.3s; + user-select: none; &.visible { opacity: 1; @@ -492,4 +493,4 @@ header { margin: 0; font-weight: 400; } -} \ No newline at end of file +} From 4a3766db56bd08990b59f73e805008e03817556c Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Mon, 3 Jan 2022 16:37:24 -0500 Subject: [PATCH 058/695] update featurelist --- content/_index.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/content/_index.md b/content/_index.md index 8c3a0eb6..9bc97817 100644 --- a/content/_index.md +++ b/content/_index.md @@ -3,11 +3,11 @@ title: 🪴 Quartz 3 --- Host your second brain and [digital garden](https://jzhao.xyz/posts/digital-gardening) for free. Quartz features 1. Extremely fast full-text search by pressing `/` -2. Beautiful, out-of-the-box website creation and deployment -3. Display for backlinks of each note -4. A customizable graph view -5. Endlessly powerful page and theme customization -6. Automatically generated tag and section lists of content +2. Display for backlinks of each note +3. Fully customizable local graph view +4. Endlessly powerful page and theme customization using CSS +5. Automatically generated tag and section lists of content +6. Beautiful link previews ## Get Started > 📚 [Setup your own digital garden using Quartz](notes/setup.md) From 99aea4826068564f81e7f1b402e00e3e101a1476 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Tue, 4 Jan 2022 11:39:22 -0500 Subject: [PATCH 059/695] docs update --- content/_index.md | 3 ++- content/custom Domain.md | 13 +++++++++++++ content/notes/Obsidian.md | 10 ++++++---- content/notes/config.md | 1 + content/notes/editing.md | 19 ++++++++++++++----- content/notes/hosting.md | 25 ++++++------------------- content/notes/obsidian.md | 10 ++++++---- content/notes/preview changes.md | 6 +++--- content/{moc => notes}/showcase.md | 0 content/notes/troubleshooting.md | 7 +++++-- 10 files changed, 56 insertions(+), 38 deletions(-) create mode 100644 content/custom Domain.md rename content/{moc => notes}/showcase.md (100%) diff --git a/content/_index.md b/content/_index.md index 9bc97817..cc1f7329 100644 --- a/content/_index.md +++ b/content/_index.md @@ -12,7 +12,7 @@ Host your second brain and [digital garden](https://jzhao.xyz/posts/digital-gard ## Get Started > 📚 [Setup your own digital garden using Quartz](notes/setup.md) -Not convinced yet? Look at some [community digital gardens](moc/showcase) built with Quartz, or read about [why I made Quartz](notes/philosophy.md) to begin with! +Not convinced yet? Look at some [community digital gardens](notes/showcase.md) built with Quartz, or read about [why I made Quartz](notes/philosophy.md) to begin with! ## Content Lists If you prefer browsing the contents of this site through a list instead of a graph, you can find content lists here too: @@ -23,3 +23,4 @@ If you prefer browsing the contents of this site through a list instead of a gra ## Troubleshooting - 🚧 [Troubleshooting and FAQ](notes/troubleshooting.md) - 🛠[Submit an Issue](https://github.com/jackyzha0/quartz/issues) +- 👀 [Discord Community](https://discord.gg/cRFFHYye7t) diff --git a/content/custom Domain.md b/content/custom Domain.md new file mode 100644 index 00000000..93a6b9ee --- /dev/null +++ b/content/custom Domain.md @@ -0,0 +1,13 @@ +### Registrar +This step is only applicable if you are using a **custom domain**! If you are using a `.github.io` domain, you can skip this step. + +For this last bit to take effect, you also need to create a CNAME record with the DNS provider you register your domain with (i.e. NameCheap, Google Domains). + +GitHub has some [documentation on this](https://docs.github.com/en/pages/configuring-a-custom-domain-for-your-github-pages-site/managing-a-custom-domain-for-your-github-pages-site), but the tldr; is to + +1. Go to your forked repository (`github.com//quartz`) settings page and go to the Pages tab. Under "Custom domain", type your custom domain, then click **Save**. +2. Go to your DNS Provider and create a CNAME record that points from your domain to ` Files and Links, set the New link format to always be Absolute Path in Vault and disabled WikiLinks so Obsidian generates regular Markdown links. +1. Under Options > Files and Links, set the New link format to always be Absolute Path in Vault and disabled WikiLinks so Obsidian generates regular Markdown links. +2. Go to Settings > Files & Links > Turn "on" automatically update internal links. +3. Use [[Wikilinks]] should be off (Wikilinks are not officially supported yet) ![Obsidian Settings](/notes/images/obsidian-settings.png)*Obsidian Settings* @@ -25,4 +27,4 @@ Inserting front matter everytime you want to create a new Note gets annoying rea **If you decide to overwrite the `/content` folder completely, don't remove the `/content/templates` folder!** -Head over to Options > Core Plugins and enable the Templates plugin. Then go to Options > Hotkeys and set a hotkey for 'Insert Template'. That way, when you create a new note, you can just press the hotkey for a new template and be ready to go! \ No newline at end of file +Head over to Options > Core Plugins and enable the Templates plugin. Then go to Options > Hotkeys and set a hotkey for 'Insert Template' (I recomment `[cmd]+T`). That way, when you create a new note, you can just press the hotkey for a new template and be ready to go! \ No newline at end of file diff --git a/content/notes/config.md b/content/notes/config.md index a5c194fc..8de7de69 100644 --- a/content/notes/config.md +++ b/content/notes/config.md @@ -12,6 +12,7 @@ The majority of configuration can be be found under `data/config.yaml`. An annot ```yaml name: Your name here! # Shows in the footer enableToc: true # Whether to show a Table of Contents +enableLinkPreview: true # whether to render card previews for links description: Page description to show to search engines page_title: Quartz Example Page # Default Page Title diff --git a/content/notes/editing.md b/content/notes/editing.md index e53fcc79..a9d7290c 100644 --- a/content/notes/editing.md +++ b/content/notes/editing.md @@ -8,11 +8,11 @@ tags: Quartz runs on top of [Hugo](https://gohugo.io/) so all notes are written in [Markdown](https://www.markdownguide.org/getting-started/). ### Obsidian -I *strongly* recommend using [Obsidian](http://obsidian.md/) as a way to edit and grow your digital garden. It comes with a really nice editor and graphical interface to preview all of my local files. +I recommend using [Obsidian](http://obsidian.md/) as a way to edit and grow your digital garden. It comes with a really nice editor and graphical interface to preview all of your local files. -🔗 How to link your Obsidian Vault](notes/Obsidian.md) +This step is **highly recommended**. -Of course, all the files are in Markdown so you could just use your favourite text editor of choice. +🔗 [How to setup your Obsidian Vault to work with Quartz](notes/obsidian.md) ### Ignoring Files Only want to publish a subset of all of your notes? Don't worry, Quartz makes this a simple two-step process. @@ -33,19 +33,28 @@ For example, I want to link this current document to `notes/config.md`. [A link to the config page](notes/config.md) ``` +Similarly, you can put local images anywhere in the `/content` folder. The only caveat is that you should reference them in your Markdown by prefixing it with a `/`. + +```markdown +Example image (source is in content/notes/images/example.png) +![Example Image](/content/notes/images/example.png) +``` + ### Front Matter -Hugo is picky when it comes to metadata for files. Make sure that your title is double-quoted and that you have a title defined at the top of your file like so: +Hugo is picky when it comes to metadata for files. Make sure that your title is double-quoted and that you have a title defined at the top of your file like so. You can also add tags here as well. ```markdown --- title: "Example Title" +tags: +- example-tag --- Rest of your content here... ``` ## Previewing Changes -This step is purely optional and mostly for those who want to see the published version of their digital garden locally before opening it up to the internet. This is *highly recommended*. +This step is purely optional and mostly for those who want to see the published version of their digital garden locally before opening it up to the internet. This is *highly recommended* but not required. 👀 [Preview Quartz Changes](notes/preview%20changes.md) diff --git a/content/notes/hosting.md b/content/notes/hosting.md index 9e26ad2b..b474652e 100644 --- a/content/notes/hosting.md +++ b/content/notes/hosting.md @@ -5,7 +5,7 @@ tags: --- ## GitHub Pages -Quartz is designed to be effortless to deploy. If you forked and cloned Quartz directly from the repository, everything should already be good to go! You can head to `.github.io` (which GitHub gives to you for free!) as your domain. +Here, we take advantage of GitHub's free page hosting to deploy our site. Change `baseURL` in `/config.toml`. [Reference `config.toml` here](https://github.com/jackyzha0/quartz/blob/hugo/config.toml) @@ -67,22 +69,7 @@ Change `cname` in `/.github/workflows/deploy.yaml`. Again, if you don't have a c cname: ``` -### Registrar -This step is only applicable if you are using a **custom domain**! If you are using `.github.io`, you can skip this step. - -For this last bit to take effect, you also need to create a CNAME record with the DNS provider you register your domain with (i.e. NameCheap, Google Domains). - -GitHub has some [documentation on this](https://docs.github.com/en/pages/configuring-a-custom-domain-for-your-github-pages-site/managing-a-custom-domain-for-your-github-pages-site), but the tldr; is to - -1. Go to your forked repository (`github.com//quartz`) settings page and go to the Pages tab. Under "Custom domain", type your custom domain, then click **Save**. -2. Go to your DNS Provider and create a CNAME record that points from your domain to ` Files and Links, set the New link format to always be Absolute Path in Vault and disabled WikiLinks so Obsidian generates regular Markdown links. +1. Under Options > Files and Links, set the New link format to always be Absolute Path in Vault and disabled WikiLinks so Obsidian generates regular Markdown links. +2. Go to Settings > Files & Links > Turn "on" automatically update internal links. +3. Use [[Wikilinks]] should be off (Wikilinks are not officially supported yet) ![Obsidian Settings](/notes/images/obsidian-settings.png)*Obsidian Settings* @@ -25,4 +27,4 @@ Inserting front matter everytime you want to create a new Note gets annoying rea **If you decide to overwrite the `/content` folder completely, don't remove the `/content/templates` folder!** -Head over to Options > Core Plugins and enable the Templates plugin. Then go to Options > Hotkeys and set a hotkey for 'Insert Template'. That way, when you create a new note, you can just press the hotkey for a new template and be ready to go! \ No newline at end of file +Head over to Options > Core Plugins and enable the Templates plugin. Then go to Options > Hotkeys and set a hotkey for 'Insert Template' (I recomment `[cmd]+T`). That way, when you create a new note, you can just press the hotkey for a new template and be ready to go! \ No newline at end of file diff --git a/content/notes/preview changes.md b/content/notes/preview changes.md index dac619e0..45f60f37 100644 --- a/content/notes/preview changes.md +++ b/content/notes/preview changes.md @@ -9,19 +9,19 @@ This step will generate the list of backlinks for Hugo to parse. Ensure you have ```shell # Install and link `hugo-obsidian` locally -$ go install github.com/jackyzha0/hugo-obsidian +$ go install github.com/jackyzha0/hugo-obsidian@latest # Navigate to your local Quartz folder $ cd # Scrape all links in your Quartz folder and generate info for Quartz -$ hugo-obsidian -input=content -output=data -index=true +$ hugo-obsidian -input=content -output=data -index -root=. ``` Afterwards, start the Hugo server as shown above and your local backlinks and interactive graph should be populated! ## Installing Hugo -Hugo is the static site generator that powers Quartz. If you'd like to preview your site locally, [install Hugo](https://gohugo.io/getting-started/installing/). +Hugo is the static site generator that powers Quartz. [Install Hugo](https://gohugo.io/getting-started/installing/) first. Then, ``` # Navigate to your local Quartz folder diff --git a/content/moc/showcase.md b/content/notes/showcase.md similarity index 100% rename from content/moc/showcase.md rename to content/notes/showcase.md diff --git a/content/notes/troubleshooting.md b/content/notes/troubleshooting.md index 0330fed3..6aab5efc 100644 --- a/content/notes/troubleshooting.md +++ b/content/notes/troubleshooting.md @@ -2,7 +2,10 @@ title: "Troubleshooting and FAQ" --- -## Common Pitfalls +Still having trouble? Here are a list of common questions and problems people encounter when installing Quartz. + +While you're here, join our [Discord](https://discord.gg/cRFFHYye7t) :) + ### Some of my pages have 'January 1, 0001' as the last modified date This is a problem caused by `git` treating files as case-insensitive by default and some of your posts probably have capitalized file names. You can turn this off in your Quartz by running this command. @@ -36,7 +39,7 @@ source ~/.bash_profile ``` ### How come my notes aren't being rendered? -You probably forgot to include front matter in your Markdown files. You can either setup [Obsidian](notes/Obsidian.md) to do this for you or you need to manually define it. More details in [the 'how to edit' guide](notes/editing.md). +You probably forgot to include front matter in your Markdown files. You can either setup [obsidian](notes/obsidian.md) to do this for you or you need to manually define it. More details in [the 'how to edit' guide](notes/editing.md). ### My custom domain isn't working! Walk through the steps in [the hosting guide](notes/hosting.md) again. Make sure you wait 30 min to 1 hour for changes to take effect. From 532bc610254db096807453bf223acaa91634fd81 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Wed, 5 Jan 2022 19:42:13 -0500 Subject: [PATCH 060/695] set relativeUrls to true --- config.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.toml b/config.toml index 5c4dfcb4..01d8d3d8 100644 --- a/config.toml +++ b/config.toml @@ -2,7 +2,7 @@ baseURL = "https://quartz.jzhao.xyz/" languageCode = "en-us" googleAnalytics = "G-XYFD95KB4J" pygmentsUseClasses = true -relativeURLs = false +relativeURLs = true disablePathToLower = true ignoreFiles = [ "/content/templates/*", From 6f9a29c174f8657a90d7dda8d39e933c220fa717 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Mon, 10 Jan 2022 08:49:29 -0800 Subject: [PATCH 061/695] various path fixes --- config.toml | 3 ++- layouts/partials/graph.html | 2 +- layouts/partials/popover.html | 3 ++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/config.toml b/config.toml index 01d8d3d8..336e7408 100644 --- a/config.toml +++ b/config.toml @@ -1,4 +1,5 @@ -baseURL = "https://quartz.jzhao.xyz/" +#baseURL = "https://quartz.jzhao.xyz/" +baseURL = "https://jackyzha0.github.io/quartz/" languageCode = "en-us" googleAnalytics = "G-XYFD95KB4J" pygmentsUseClasses = true diff --git a/layouts/partials/graph.html b/layouts/partials/graph.html index 02085625..ae934c03 100644 --- a/layouts/partials/graph.html +++ b/layouts/partials/graph.html @@ -11,7 +11,7 @@ } diff --git a/layouts/partials/head.html b/layouts/partials/head.html index b754ca39..7ab5aeab 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -8,7 +8,7 @@ - {{ $css := slice "base.scss" "darkmode.scss" "syntax.scss" "custom.scss"}} + {{$css := slice "base.scss" "darkmode.scss" "syntax.scss" "custom.scss"}} {{range $css}} {{$sass := resources.Get . | resources.ToCSS }} {{with $sass | minify}} @@ -26,9 +26,24 @@ {{ template "_internal/google_analytics.html" . }} diff --git a/layouts/partials/popover.html b/layouts/partials/popover.html index 3a7de110..35f0738f 100644 --- a/layouts/partials/popover.html +++ b/layouts/partials/popover.html @@ -1,5 +1,7 @@ {{if $.Site.Data.config.enableLinkPreview}} {{end}} \ No newline at end of file diff --git a/layouts/partials/search.html b/layouts/partials/search.html index 0c853a05..c2ff77f0 100644 --- a/layouts/partials/search.html +++ b/layouts/partials/search.html @@ -67,189 +67,194 @@ }; From 8e85e274f6e5913694b67319f1beb7a2ec5b5bed Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Tue, 15 Feb 2022 19:42:45 -0500 Subject: [PATCH 073/695] change output to static instead of data --- .github/workflows/deploy.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index 3ec76dae..933261f9 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -16,7 +16,7 @@ jobs: with: index: true input: content - output: data + output: static - name: Setup Hugo uses: peaceiris/actions-hugo@v2 From 3b3e6ec3b2a56ee4d03b6f4c84af886821bfbe84 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Tue, 15 Feb 2022 22:54:20 -0500 Subject: [PATCH 074/695] fix relative pathing for dynamic fetch --- assets/base.scss | 11 +++++- config.toml | 2 +- layouts/_default/_markup/render-link.html | 3 +- layouts/partials/head.html | 45 +++++++++++++--------- layouts/partials/popover.html | 47 ++++++++++++----------- 5 files changed, 63 insertions(+), 45 deletions(-) diff --git a/assets/base.scss b/assets/base.scss index 6f47da3a..a462a33a 100644 --- a/assets/base.scss +++ b/assets/base.scss @@ -470,7 +470,7 @@ header { .popover { z-index: 999; position: absolute; - width: 15em; + width: 20em; display: inline-block; visibility: hidden; background-color: var(--light); @@ -491,11 +491,18 @@ header { } & > h3 { - margin: 0.5em 0; + font-size: 1rem; + margin: 0.25em 0; + } + + & > .meta { + margin-top: 0.25em; + opacity: 0.5; } & > p { margin: 0; font-weight: 400; + user-select: none; } } diff --git a/config.toml b/config.toml index 01d8d3d8..5c4dfcb4 100644 --- a/config.toml +++ b/config.toml @@ -2,7 +2,7 @@ baseURL = "https://quartz.jzhao.xyz/" languageCode = "en-us" googleAnalytics = "G-XYFD95KB4J" pygmentsUseClasses = true -relativeURLs = true +relativeURLs = false disablePathToLower = true ignoreFiles = [ "/content/templates/*", diff --git a/layouts/_default/_markup/render-link.html b/layouts/_default/_markup/render-link.html index 2bde76cd..c720c458 100644 --- a/layouts/_default/_markup/render-link.html +++ b/layouts/_default/_markup/render-link.html @@ -5,5 +5,6 @@ {{ .Text | safeHTML }} {{- else -}} {{$fixedUrl := (cond (hasPrefix $trimmed "/") $trimmed (print "/" $trimmed)) | urlize}} -{{ .Text | safeHTML }} +{{$rooted := strings.TrimRight "/" (.Page.GetPage $fixedUrl).RelPermalink }} +{{ .Text | safeHTML }} {{- end -}} \ No newline at end of file diff --git a/layouts/partials/head.html b/layouts/partials/head.html index 7ab5aeab..1afa3c64 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -26,24 +26,33 @@ {{ template "_internal/google_analytics.html" . }} diff --git a/layouts/partials/popover.html b/layouts/partials/popover.html index 35f0738f..37f0db48 100644 --- a/layouts/partials/popover.html +++ b/layouts/partials/popover.html @@ -1,37 +1,38 @@ {{if $.Site.Data.config.enableLinkPreview}} {{end}} \ No newline at end of file From f192f9a23df34d30e223e20ab5e8cb8210a7dfe9 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Tue, 15 Feb 2022 23:03:02 -0500 Subject: [PATCH 075/695] fix #54: root all image urls --- content/notes/hosting.md | 2 +- layouts/_default/_markup/render-image.html | 8 ++++++++ layouts/partials/popover.html | 3 --- 3 files changed, 9 insertions(+), 4 deletions(-) create mode 100644 layouts/_default/_markup/render-image.html diff --git a/content/notes/hosting.md b/content/notes/hosting.md index 0227fde0..a6725b72 100644 --- a/content/notes/hosting.md +++ b/content/notes/hosting.md @@ -10,7 +10,7 @@ Quartz is designed to be effortless to deploy. If you forked and cloned Quartz d ### Enable GitHub Actions By default, GitHub disables workflows from running automatically on Forked Repostories. Head to the 'Actions' tab of your forked repository and Enable Workflows to setup deploying your Quartz site! -![Enable GitHub Actions](/notes/images/github-actions.png)*Enable GitHub Actions* +![Enable GitHub Actions](notes/images/github-actions.png)*Enable GitHub Actions* ### Enable GitHub Pages diff --git a/layouts/_default/_markup/render-image.html b/layouts/_default/_markup/render-image.html new file mode 100644 index 00000000..ff4e8b39 --- /dev/null +++ b/layouts/_default/_markup/render-image.html @@ -0,0 +1,8 @@ +{{$src := .Destination | safeURL }} +{{$external := strings.HasPrefix $src "http" }} +{{- if $external -}} +{{ .Text }} +{{- else -}} +{{$fixedUrl := (cond (hasPrefix $src "/") $src (print "/" $src)) | urlize}} +{{ .Text }} +{{- end -}} diff --git a/layouts/partials/popover.html b/layouts/partials/popover.html index 37f0db48..32f019ff 100644 --- a/layouts/partials/popover.html +++ b/layouts/partials/popover.html @@ -11,9 +11,6 @@ fetchData().then(({content}) => { const links = [...document.getElementsByClassName("internal-link")] links.forEach(li => { - console.log(li.dataset.src.replace(baseUrl, "")) - console.log(content[li.dataset.src.replace(baseUrl, "")]) - console.log(content) const linkDest = content[li.dataset.src.replace(baseUrl, "")] // const linkDest = content[li.dataset.src] if (linkDest) { From 388a2bf78bb08c2b37e918c3a2e0acc72803e187 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Thu, 17 Feb 2022 10:44:39 -0500 Subject: [PATCH 076/695] docs updates --- content/notes/editing.md | 4 ++-- content/notes/hosting.md | 10 +++++++--- content/notes/preview changes.md | 6 +++++- content/notes/troubleshooting.md | 3 +++ 4 files changed, 17 insertions(+), 6 deletions(-) diff --git a/content/notes/editing.md b/content/notes/editing.md index 17730eff..9a084c89 100644 --- a/content/notes/editing.md +++ b/content/notes/editing.md @@ -24,7 +24,7 @@ Here's a rough overview of what's what. **All content in your garden can found in the `/content` folder.** To make edits, you can open any of the files and make changes directly and save it. You can organize content into any folder you'd like. -**To edit the main home page, open `/content/_index.md`.** This is the home page which is slightly special. You don't need front matter here! +**To edit the main home page, open `/content/_index.md`.* To create a link between notes in your garden, just create a normal link using Markdown pointing to the document in question. Please note that **all links should be relative to the root `/content` path**. @@ -33,7 +33,7 @@ For example, I want to link this current document to `notes/config.md`. [A link to the config page](notes/config.md) ``` -Similarly, you can put local images anywhere in the `/content` folder. The only caveat is that you should reference them in your Markdown by prefixing it with a `/`. +Similarly, you can put local images anywhere in the `/content` folder. ```markdown Example image (source is in content/notes/images/example.png) diff --git a/content/notes/hosting.md b/content/notes/hosting.md index a6725b72..bb1d912e 100644 --- a/content/notes/hosting.md +++ b/content/notes/hosting.md @@ -16,13 +16,13 @@ By default, GitHub disables workflows from running automatically on Forked Repos Head to the 'Settings' tab of your forked repository and go to the 'Pages' tab. -1. (IMPORTANT) Set the source to deploy from `master` using `/ (root)` +1. (IMPORTANT) Set the source to deploy from `master` (and not `hugo`) using `/ (root)` 2. Set a custom domain here if you have one! ![Enable GitHub Pages](/notes/images/github-pages.png)*Enable GitHub Pages* ### Pushing Changes -To see your changes on the internet, we need to push it them to GitHub. Quartz is essentially a `git` repository so updating it is the same workflow as you would follow as normal. +To see your changes on the internet, we need to push it them to GitHub. Quartz is a `git` repository so updating it is the same workflow as you would follow as if it were just a regular software project. ```shell # Navigate to Quartz folder @@ -43,13 +43,15 @@ Now let's get this site up and running. Never hosted a site before? No problem. Here, we take advantage of GitHub's free page hosting to deploy our site. Change `baseURL` in `/config.toml`. +Make sure that your `baseURL` has a trailing `/`! + [Reference `config.toml` here](https://github.com/jackyzha0/quartz/blob/hugo/config.toml) ```toml baseURL = "https:///" ``` -If you are using this under a subdomain (e.g. `.github.io/quartz`), include the trailing path. +If you are using this under a subdomain (e.g. `.github.io/quartz`), include the trailing `/`. ```toml baseURL = "https://.github.io/quartz/" @@ -57,6 +59,8 @@ baseURL = "https://.github.io/quartz/" Change `cname` in `/.github/workflows/deploy.yaml`. Again, if you don't have a custom domain to use, you can use `.github.io`. +Please note that the `cname` field should *not* have any path `e.g. end with /quartz` or have a trailing `/`. + [Reference `deploy.yaml` here](https://github.com/jackyzha0/quartz/blob/hugo/.github/workflows/deploy.yaml) ```yaml diff --git a/content/notes/preview changes.md b/content/notes/preview changes.md index 191810eb..8d2a3892 100644 --- a/content/notes/preview changes.md +++ b/content/notes/preview changes.md @@ -4,6 +4,8 @@ title: "Preview Changes" If you'd like to preview what your Quartz site looks like before deploying it to the internet, here's exactly how to do that! +Note that both of these steps need to be completed. + ## Install `hugo-obsidian` This step will generate the list of backlinks for Hugo to parse. Ensure you have [Go](https://golang.org/doc/install) (>= 1.16) installed. @@ -15,9 +17,11 @@ $ go install github.com/jackyzha0/hugo-obsidian@latest $ cd # Scrape all links in your Quartz folder and generate info for Quartz -$ hugo-obsidian -input=content -output=data -index -root=. +$ hugo-obsidian -input=content -output=static -index -root=. ``` +If you are running into an error saying that `command not found: hugo-obsidian`, make sure you set your `GOPATH` correctly! This will allow your terminal to correctly recognize hugo-obsidian as an executable. + Afterwards, start the Hugo server as shown above and your local backlinks and interactive graph should be populated! ## Installing Hugo diff --git a/content/notes/troubleshooting.md b/content/notes/troubleshooting.md index 6aab5efc..226216be 100644 --- a/content/notes/troubleshooting.md +++ b/content/notes/troubleshooting.md @@ -6,6 +6,9 @@ Still having trouble? Here are a list of common questions and problems people en While you're here, join our [Discord](https://discord.gg/cRFFHYye7t) :) +### My GitHub pages is just showing the README and not Quartz +Make sure you set the source to deploy from `master` (and not `hugo`) using `/ (root)`! See more in the [hosting](/notes/hosting) guide + ### Some of my pages have 'January 1, 0001' as the last modified date This is a problem caused by `git` treating files as case-insensitive by default and some of your posts probably have capitalized file names. You can turn this off in your Quartz by running this command. From 9c04ca026676445849081d32efb8e840465994d5 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Thu, 17 Feb 2022 10:49:41 -0500 Subject: [PATCH 077/695] rtl docs --- content/notes/config.md | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/content/notes/config.md b/content/notes/config.md index 8de7de69..637a19f1 100644 --- a/content/notes/config.md +++ b/content/notes/config.md @@ -46,4 +46,20 @@ For example, the structure of the home page can be edited through `/layouts/inde More info about partials on [Hugo's website.](https://gohugo.io/templates/partials/) -Still having problems? Checkout our [FAQ and Troubleshooting guide](notes/troubleshooting.md). \ No newline at end of file +Still having problems? Checkout our [FAQ and Troubleshooting guide](notes/troubleshooting.md). + +## Multilingual +Want to support languages that read from right-to-left (like Arabic)? Hugo (and by proxy, Quartz) supports this natively. + +Follow the steps [Hugo provides here](https://gohugo.io/content-management/multilingual/#configure-languages) and modify your `config.toml` + +For example: + +```toml +defaultContentLanguage = 'ar' +[languages] + [languages.ar] + languagedirection = 'rtl' + title = 'مدونتي' + weight = 1 +``` \ No newline at end of file From 714b4fcfa30ac1155747b9af90bc0e9519cb4bba Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Sun, 20 Feb 2022 21:40:10 -0500 Subject: [PATCH 078/695] fix links being broken for pages with spaces --- layouts/_default/_markup/render-link.html | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/layouts/_default/_markup/render-link.html b/layouts/_default/_markup/render-link.html index c720c458..7ae8a3e9 100644 --- a/layouts/_default/_markup/render-link.html +++ b/layouts/_default/_markup/render-link.html @@ -1,10 +1,11 @@ {{$trimmed := strings.TrimSuffix ".md" (.Destination | safeURL)}} -{{$trimmed = replace $trimmed "%20" "-" }} -{{$external := strings.HasPrefix $trimmed "http" }} +{{$dashedurl := replace $trimmed "%20" "-" }} +{{$external := strings.HasPrefix $dashedurl "http" }} {{- if $external -}} -{{ .Text | safeHTML }} +{{ .Text | safeHTML }} {{- else -}} -{{$fixedUrl := (cond (hasPrefix $trimmed "/") $trimmed (print "/" $trimmed)) | urlize}} -{{$rooted := strings.TrimRight "/" (.Page.GetPage $fixedUrl).RelPermalink }} +{{$spacedurl := replace $trimmed "%20" " " }} +{{$fixedUrl := (cond (hasPrefix $spacedurl "/") $spacedurl (print "/" $spacedurl)) | urlize}} +{{$rooted := default $spacedurl (strings.TrimRight "/" (.Page.GetPage $spacedurl).RelPermalink) }} {{ .Text | safeHTML }} {{- end -}} \ No newline at end of file From cdc4f1a8407449be7a514414795f27ff3b70bf37 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Tue, 22 Feb 2022 13:36:08 -0500 Subject: [PATCH 079/695] fix: relink search button (move outside content load listener) --- layouts/partials/search.html | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/layouts/partials/search.html b/layouts/partials/search.html index c2ff77f0..6cc7e24f 100644 --- a/layouts/partials/search.html +++ b/layouts/partials/search.html @@ -239,20 +239,18 @@ async function run() { } }) - window.addEventListener('DOMContentLoaded', () => { - const searchButton = document.getElementById("search-icon") - searchButton.addEventListener('click', (evt) => { - openSearch() - }) - searchButton.addEventListener('keydown', (evt) => { - openSearch() - }) - searchContainer.addEventListener('click', (evt) => { - closeSearch() - }) - document.getElementById("search-space").addEventListener('click', (evt) => { - evt.stopPropagation() - }) + const searchButton = document.getElementById("search-icon") + searchButton.addEventListener('click', (evt) => { + openSearch() + }) + searchButton.addEventListener('keydown', (evt) => { + openSearch() + }) + searchContainer.addEventListener('click', (evt) => { + closeSearch() + }) + document.getElementById("search-space").addEventListener('click', (evt) => { + evt.stopPropagation() }) } From 73e526a7d50315b9177c2c11d12ebcde71b05fbd Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Wed, 23 Feb 2022 12:28:25 -0500 Subject: [PATCH 080/695] add screenshot to readme --- README.md | 14 ++++++++++++-- screenshot.png | Bin 0 -> 945268 bytes 2 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 screenshot.png diff --git a/README.md b/README.md index abcfb68d..15beae54 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,16 @@ # Quartz -Host your own second brain and digital garden for free. + +Host your second brain and [digital garden](https://jzhao.xyz/posts/digital-gardening) for free. Quartz features + +1. Extremely fast full-text search by pressing `/` +2. Display for backlinks of each note +3. Fully customizable local graph view +4. Endlessly powerful page and theme customization using CSS +5. Automatically generated tag and section lists of content +6. Beautiful link previews > “[One] who works with the door open gets all kinds of interruptions, but [they] also occasionally gets clues as to what the world is and what might be important.†— Richard Hamming -🔗 Get Started: https://quartz.jzhao.xyz/ \ No newline at end of file +🔗 Get Started: https://quartz.jzhao.xyz/ + +![Quartz Example Screenshot](./screenshot.png)*Quartz Example Screenshot* \ No newline at end of file diff --git a/screenshot.png b/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..1ff1999935232447e537c935b376871b07076d99 GIT binary patch literal 945268 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 z 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�yY*G8?rJL_t(RGHU|RR{Jgjr&P_7s~tm3XCACnD^McaxZz8fR#jW zFb5Z#=19fOb)x%hJiau10t3(+rT)O}f36?jFR#TC_r*L$LxO7^Xeq#w5Z6(yC0ykq z#5=o}H#YtbD&r`K%y8ycHA*rGmT+HSq7{EnHW%@sA5ve+60-4_@AyDE5NiAS_f;0i z%&=TGEfl74CwfQ6q!^fDW|2o50)%FChJl58du4WV6jEyU2Z%Tfh{Kzc8NEQjqja>> zrF`jOrL&56#@UDO&VH!j8`(#>r5ywJ`ZDY6lmnGpo3nNHpVl`V%C~=}==EGMzW}Pe zmXjll;=LoVV6;K6>&MvUZ|cLN=?=&}0Nz)9S=($ZrMw#om8+Q=$o`P=ojb%;TrNLj z+dZg6fTPCb%i-XPBqF;X!P>mIdw0 zyd6LJsP1-#;3M{=bRIrNEb8>R4{j%Skm zQ9d=1seDjfx!)fDvnKC2s+Ej2=7)_@4}NVHUs4StIw>2u-r8RIwB&=%koh0^ zBj=HS)7i@{jyA6CGmuz*kZ$lKoK1ZEq$~Yx!kOJ24eKux-(Rm>W|;9LX?wi0~TxrCiCME#JNi zB33mOj3!|})e-qJ!EVQF+a}w`ehgjin#&kT^>$-})ypLBMY}tT!;x@G#ex^=&W+>A zwrv~SA!x%_m&(gF{a3>~J9rK@dE#qck7VambaZ*m13&-a$+l1iKfl=#{zbGsHU3aHC^)%K6xL@L10)2*EZNgGq&K?6a| zAx3jNKrze3R2}FbWd;A8ox=UzWB1i0d6>=HQz*lCb0n;v3J^i<&>qu(JrVR9A8tR| zU2W;PRBhjG1Yw9)YHqtHyUwjeOz}pU&bQsPiA@yX-(b%&VvBtGjw~K??gB&wp9LE3 z32B`(mJ=??e{+1I3Zh-y2ZR_>?jB>CcsO{&M&9MqQ9AuswP)4|k!4lx;Q)m<9buY8 zUZ3C@i8*Z0;J;E)W{IgEX+Ns*^IS9`#X@Q>UKhaZsJDuIJc!w7H9X~fO#%9lCoH)Yx6009w(~!?pfJFq02<+l)K=n)U6ga z;Edr*j@Ib^o#*#wi2EPwM!vw##+MsM*o~TAC-2ZCtad$M!1h~dH^OCSMuZ+sD=mk!Fa*T;pGE*RMfs4Z__Nek7xgCGu9n%Uj+&?+>h)jm7TeeO!H_R(B8XP+pxtZkSm6zn30S zB`x*6ZBJRx>x~mOKK*8MXKgaN*|mdX(7p;Fr9bXB$8z)9<{9VU$_m!o_IBNhoAEu} zL}2tEnOmtI2_OBeoQpy4on{pvk1hhT&xIP}>ffvcc-pv|90~!jSk~>AuK6$^!>F9k z{r1>zw6g5P5lt(fdV|HIc|J`Wn?wnnqs61&;KSkA265|+qUW%@#`n#O@JuPQO&~&k zcl*Cf3X6Jw{LHqnc){z229oinZl5 zpK_=T&Tr2w*O?BLO#Y=j`?D2;V#b<4!X48uOq&^1#bi{aBp#=}-NAOvxZHaZ@(|&v zSbI2B7u~F(7E?=$68Dt#q$y}0(Zmhq^i14;NYG58=+2IlR({RPP%O?R;()<~PyoJL z^>NpZ&JAkH^E0b`!mykX5WNEn0|2`mK~;VrR+E`zWy2#ex8wcAbAN`l`f7H8O|N&I zbe=+<=8S#Ls;0FKZ2Dbn10TYbT}Pbs_L%~2^SKjcr0Np@o?sZB88l+UI6-x66fwOy ztSM}E1kd{i-YsM8V~x}m0UB^wV>CWCn3n`tn*-KwkYN5={K(UN1WalErc$LH3p$FE zR|1X=!jwu`yGI_(AzI2S)Q?536Yz8q`&vno=>o%!cze(5h-}s0h9NhX2}*d1g4T-P zhzY68z2!3uF_!>)EIPfk`Z32xb*l13kxGIiW9rF%9;Q?oFBia}SN8LkO=i19lpR2* z1{F%Jz0`fYW>e;Me{AxnZ7HkEr{@~yG7Lw$hO}48o~=%)7Aeh*?h*WWn7y%1>WbSW z9z>S=fu-Jn_xJ~(PUy`uv%5r@{geYp(s;U_y6ZcRDntafpqj8Vp+(aa}|a zZ$lY<`b}U-xo^sPk@XHNl2b+ictfw-A6~rhZEfw_#wD7@*o)cMvBnk?CnoHQd~f-z z&w0I`>b75STK6{j^Sk*@qp*p|e)(o}Pn3t)5zyk})L&M{Qx_$!YLHNjqV29f2*QtO zApA%H!%$s(tg3uHt65B6i>$D^6F53MWZH}tXZM6vUDz{Z63C?v-8nqQK{s2P&c=qp z7wu{z)6nj-FJsSJquL4BL^Hx?jkVYYsrqtm3OzK>1zDhNhkbVDr?Ertux>yuxEX*X zd!m)HJpdOj2|L%<6p+dq)u!v^76nYY5x|cOktNC(3N5w{_nWD(p%%t{h zFfx7Q53i3`Or`}}2#I*Oo+T!ZgPp1K$+uSXP@}z4;(2{4XWfBmV`lb0o5Rg(f@k|W zkfU3!PvN?rh;PgiF)O_;SEsQgTpX-#aG`j=gmvvoKaj1QNLoa0xGw?*eP6jt)XWpd zMz8frvo50e>kW^D_#_2!=eK7m8*ASzrrk4P{a23TJSO};dz^YaHFe{p^5vS^ni4Z! z0A59yEf3k`z0W<9@N%)D;?3}g=KB4t1XXk#pVpU(&v^+R9&q2)Nwc{2`BR*rYV~gJ z-M9{`ObG!iv+}MCfq>410@B)>{U`4;& zp-fqQYb(F|uHU!VB2oVH3(B44@_^N0QprHzDt?2LiSVlA`{rE>1Nx|f)(hhOFT9H0 z{o9jUj@FrgWf3^09z$)fv+lH3RLH)8Zgg? zz6$uz%)1u5aYJ=3clHGzUpyo#Ew|gI;*lgweReOWNOxJa>lcWd9wr3*TGwi{YA@~U z#}o-xG`%4?e=L%jrs#?4^>)&UxhGv~6!i0R>5mC=^$n2_I5ErdTOd|>^?GP?@LpjE zWqiq%LrsOjvTXYgKJH?>uy!Q2_i;u(H~;aoYzenr!lLt!{Fk zl22}K$;zW=9UvI$_V1AqVd)x0mg?-U3FfkEbCR>|WE@txxGp>2k_4+JFXjav;pEcVSEN!pb4#UO)LNJ`P{?$sQAkN!y zM2af&Rb$P}+mus}7j>f>Z%~;6S-KJYej~<#9`#M1uVlI)?`sdgzaM{cWM5MIPMEJE z(ZN#NjeN~Slz4-wEI}lsUvTPXM zez%5#>^y@l)bNRtZKb$)J|y&J!Pp%`7R_Un&AFG9h?X+qsZw0m- z`#wbSSO50liBy^ddxr7173?+90s}pVqWI8Hn=U43y`$O=@hWw}N=g%jF!D~^tO)@u z(iRLMlWz*@3>49r)6hsur=*F7SHGw`f~-^_R1`zFJtef>a=&jcp@Nx)aGQvOfeK8Q zLugQ$udjV&QBk^WAhcnkS^J8fIY9e#)jsjP6-|{R(t?>Na{672Fa+jvKSWU9&+%86 zU{3yyy}mU1?fC`c+?0~gCLSrzhsnz@ zwN;1JN~~LKsoJ>s7thgmzP&SB<##qdg_kN^FN@#uzS6Y8-$PlvnnzOANa3OC10@{{ zS*U6T65~D85^CGO3obvOlO>Fb4}5W9G-v#*rRn4qc{MD-adKpzF2B!CWsOWz7Hg+Q zqf>gobmD=~!Mog-p((Iyg{3CbG%2w%!399F6CWUzOpp#}2rh(I_U^io@CEsNoLXFD z`O5hr_;}nE6P_1lFF5fy&9SBH(P(y6!#zuarFtylAIyg>ZNND=^FAc@{nIiriZq5x61>k;7(y$9s;yI`DZ?^&e>fvf` zE#rBI?|!4=h1XKzQK_XS{ftF6sz0~WA-xKt9L6ii24Wj8kfXTup}9@EXlXhKaC&0R zVw)haSHD^fLDjM5_06BNbIgR{g)Om21$a9GdxKlG)xzDk@LY2r;Q(c~@{-8HS@=39 z6C#fvZid%EJ<|XgXm8bd%851+CnZS;Y)>x%8oY(F+LF`LF&MKG#@=#Pt8gwbH1Dae zCx^f3xePN({Gc-kjoK}(%*svUgK00UMzw7F*=9Ono#Nuy6{Uz!Be#=$nR^L>AA-MR z-i3{eDzb$VOP`U-y-}#LY5OJ2x$n(I-)kBEmpi~?=k3l{)2-x0UY;>Cxkg3hhtz(7 zKIK)SMn-71Ow#p69U+oN9{>EH&goQDrANjJ`;x_87AaNG&qE383C+K!Jms8cWSzHK z&|77+^x}kKmtHd_0%^%D*Xg&Q>T@m=q;IyhB-~zttFfZTURwRI^#piA{&?!Bc($g( z?UO7@_r8O-FAB&*q9qXvmd5}En$_J)_;swRzCQhr=qTq6I&y=1I@5IaiXddSw6@!X zzE(~IRIbXedr1oO=4B`VsF26;8qkWTngOhddRK^MjQR9~2!N;B-N7li^5n;SXUX_i z>y_-m``TMS@4h$RN~YM^fkTG0;x9fQPeLhAQTwix3KN%Jj(5l(vrx>~cPGYklAUH;w zrRO;`;b984n`RD;<0-?kXMV`{C%akJrLm^`JhZ%HSW^Xurz+TLmavW|OM%s$)3ay! z@RQ_6Z#Cy*s%QzLWV<_SOw5IlhMPC<=%Qg*&@8e*v}ak6o18yw@dz%>owo9-*A(+^l44L6pUZ)qnbd;8wH@%SAT zd}*^GBd{6W7?|mvtT3g;o9J{!io)bU7Wd-=|J=0cO`e2HvC~AG<~Bx=i%!SkKetrh zE#?2}u-)Hq-tIulmbo~;<9#=FY*kjAj6v@okc&V9n zUTc7)QP@}c)E6Ay*x0z!)6wf(mEBKDFC*536A!T1=)8>9bF-heBX$UJsMu&rDTs2Y zbK(W4i2nLZOUF^2IU#VPYEX2RhmiyHyLWy?Zm{}x>nkpBkO)jP{V>$)pu=O5H!JId z5)X$1=-iVIBi7DM)O~@ZUo5VbYNKbj9;^yzc;e>w9q{je1HHcUgx~+PRn>u}uzAR) zt&TTpC_k<#+o$8jFMB@E(MwLw6S(q`Rh??Xg>jQ<4nc{hYfU>Uo-#u3+&Q7tA;8mV zM{F+NH_$0dJfMKu>yE-)81tvfonj}E$9l&}4C+-AGkFSYr~i=dd=-HyKutqmHVCr)0I}TLIg8>k)h3SjP$xEtUzt%p%T{+blqHnWs zm&esKxyI_vLrC<0(9(bB{5{+Ek`U=pb@`971$|Nyk4A}vJ#uyMJPKQAjInhIell~o zC>sv(@G%mU4#G}CwSnke1V$dOKZ}gW_Jpe>#%ZChXN8iaKYqBuSW*-rCk$Tv<~WIY zQ%f^G{;>2?FxK(8ok76l3mHI$ys&ImSP*;4JXrPIs-FIPy)mN;iY@1=8qdcx&^~rr zhnL|MmI4Famq4ym`HuLWj=pZ;1~HrEXR!kd&G#&M(zVz4R$7D+^KFPIZ19IN&I{!7 zm;gOA*>@*wfq#~q$*VmyjBI9JA#(ddRd-8&dsTlvY_t#&P8$yR53avIeVO++I<`B| zx16~}V=#XGypR>voed}x!tcKv7}jSb+(tzS;+(F1mGxo7RvBKskT@elz6|*Q0ohV> zAX~~AWJ~485)T9}s22x$u<1?Zu?E)ixsu7=j^y^RZx=>K1-4I{Y%W6vz+$5m- zdyT$T`CG&kO9&IqJ>5={v_Q4X;RA(Hj!OFREx zsqq&XmA%CHd(SUS-ZT(!+d04gMe2p=jv71Nm!uUp<6MrjO@FEbi~i|zZxZLwlPzaF zS2;JE|66M;^6zPl|FhZ!aI617kP8s~`=lPONunw_q5hMka3EZRYfc?Y%$dEqlf4r z$=-^OoZ6F7&-CZdrxz+M4 z^~X#^_MNY;KMJlLjU;U34#nGu&gqN!4$s4BjYn;D&^!WX(IUstP6?uRwZx??el{7J zkzI}-O}m2dAS*xC-Q$oxgC+3um=<JZCAg=jhW5CvWcHIdE%oD0T7c z(#uWo)cg05D%Y_?mJfoy)(+`{YrSws5`;pWAIJ1vS3Z*EpMej1F>b9@2KZgSKa>PdizLz?*KzH(VnAVl#9vW_L8?-nFkEGI(PI5As?#<`-~JqsGq~xyzDU*@uby zX*+$KwfzoJPvCV0Jspb{>&j!1e%9N6-Iu7%-AB4#v8kN{0aQtJIcQO~XWXfL1b7}?_#rdE!S_=E21Lc{@Vt8|HP%(lv#-jP)p)-!&~==Ff(B7Cs0Bb7q=0j$=}nFp3Sch2+3sw@j9l8yqQ6(iURP2U| z9)DVkO{(BA-}OD+++Rjx&*gNYG(5rxaDh(Q+D1htKp%F?ThG|(GT8QV;i|qv zt>kK&;m`9?>U@Zpt}U&@&9v~JHN(6eGKUQO)jZTuLM%1_StM4Ix+!;1GxkC9zIaA! zyXqMIeyW#`{n=jk%84;cEl*TT6(7H~goUCZ z?WQ4Z%OxGnkosZK?Y_(CX2IXVMO~V01ttfFcmX(i!S&#&HUV}z)UO3=yumTpppP2z z!_A5b3L><&Yr|ZtC?<<>WL#!5k{Zu}GoN^ad!2hF5j*|x zPjZ(`|79UU#4_iF>2{0J(l%h>ai@7Ax~wnEcS!(s1BdTBT9}`%?Mq72Cy_O%%_%R& zEsw=qV6j`H2#14{x!m4{z0G2f7_A{O5KMJ@IK(JmXbuEZiD+b187G5}F2eU!5=AD) z+wl@mY@&pQ+GHqHX|YcY$r>`wlC!=2S;-}w=0#c3{#A;FI}1(U@_ruO7=QUm*KNxm zGhy<8i9CsdYDxjx-2PLSZNbur!rx?nLO}ch>AHd^?-R^xN3WV%{Lk#hQ*Kh>IT^1( zHdUieVHJ{ND9NG^8!E}pw~(t-N-rrby4aa)hEo-BniWK~SxLj0h>uo1DU8#0x;BsJdvTM+9>S;h8u-!okL(?s;YUY++N&-l5AQ&Pc_C~VTl->UJl{fWq> z!=tZM_{}Cagev%2d$6jSImZ@w!}uOzyzmNIhO9<2O_U0U#VPGh z_A!F>>06JXF|Ak{?fmRzs;d}HXf;qdEA{}3(;yfJy4$+<@1IDx%NDk>(-FS%Vp`Oc zO`!s(>JOztIAS5&QzwKxqRkZ!RH}NI^?8~NJ*C!Ng*hw9Q)YE)b&Thr<-ad6{1+F( zvwiVucT5+@8Ni!KjHeHXq~FG0Lp48>&@3=ZNpQhiy`>wxv#V?KSRoPT=I;O;ft8intHpuQ1}{@Wd_u_Z@6(wyZiHLsy$ z&MB^pXwLparkeizFPHM~;nR}$#pZXM;e9?D8KL~F7;PoCocKz!K)-P_txD1st-U+c zZ^qED^ra4e(RkyphY8knl=7)Kv#spfT4U{Vdt?{G;P8<1DC7VmBo*O_Y7g{neAG(9 zxz-Q?7e&K^ERz+Bb(B+7)+i`mtJ(_l?3yp;axw*Ue82{UMe*`< zY$2)oP!D3K4v{n&LU?E7tT`j9T@-2f3Q-`yqiFT1+3JV%TC$gdiIa^&f`q0dc%mrJ zVs@C1T+qNFex@|PoN^b{(8L|p+PmN3>FG=mS_RbZmOsPD3bQZIJI$KNR7_6h1R~V- zRaySB)IAXjXoR_r&?I(yaZ@uqf8=hx^Hf^EY*zIvQS@>_=B9dxq$TnIq3-F6sv^P2 z#eP#{n=7vdeCKur^xm2=4BY7!_#i^?(_u_KUKTg~ex#RSiZomvtLjn&}>_OE3q4Pk;mk9T!Foc6aQ|ND(cKWHbVmnqN~QJ`QU)h z+M$~dMXokF70#2>jeDW%^6h5` zJDMY@m5FBg!5*0&{`sIHB*oh)aN*>z3fT51)sN^LVwga0wkZ{21$clpP{loJO-tWR z1fWLIu6neQ4$zIh^7mer@p^7NG!B8U81`9GlhjARiZEtp;_?OL5|f4#Q6=X9a2D3gZ^vC2T^fP zr%(e$*aF?KoSAOCXJQ%conJ`!Bu(n+OMv@fGMQJ+pp>d-@b&(bum%2Y7Y}3zMF_EW z9_(pIm-Y~Dm^pv|QC68~cTfD+^m>3YU^9#@3ZzO)_^WN3lK~V7>F>+VL{xCjLL=Ad zcfV4E{U0uKK14nnPQA-w2~D39P^+CBQe3KGabJEg-srR@Bn#qXHQ9J!N~V#q;j3ns zU#++Nuo36qB^}DoneuDeSNvWwo^@X-@De{rvkI83CR%q-1Tqcb4^zfpar8GFC#^Ta zl9TbPlvC)@kK-hl#z;ZiW(ji|1?uT;>W&(J)|G;;9#lJL| zDS%!mdqXUvjzls{{s^@ixJb*YN};@BLPc@YwULtg&Ew3=(6BOU24qYL44atO@+n|R>luI6D zYMJLfEjfVh6y@nkycVFUm|H3KgFer_@z>Fj-ri1~Ng7}~6q=g~wP7p-J-0;gk~RhY=)>BObB1{4i?OO!VM64sOo;EzJqw4F5c`MrA)VblO@n4b^ewN!p38ZJ zpru>8Ly;s7fz6@Xbyi-F6btt#LQ{Q>=)@V+|c`)M?hN5koBak^h$t-mH_j*44<|ToipeEsH|EIW@vGhNeOY78&zhUUqD6hQ6z$#q`LBW z@MELppq-n;;mqvhG=ab?<9fZ=NA`~*zC8I5R(rZda?TAU~Gv zN$CS@#s|l@-DkAPt5+m`(2?~zgzyLSD*xS}Hw|Y?jJ0WQfB7F&s_zUv_kd|JmI_uK zbECjh7m&;qr4zbQa>tZdwpAqQbZ)%ur-P7+vb3&g>LFG=5p+tzZ@_b7R6HsmK5)<}KvcJ{XyLka4|E1MJVFuw0iN{2TKB z>s0)2`~$E%yR*Q0bBm4Q<=MD#e5Iq>>E~_kjVH-_X*(#HyDR|V(|h3Y_qe4w0H z^t=q?5L1zYl) zYJ+7-$<=~N+c4xUM_XF5kjGaU6Z!(ai8h4fh@`UjqT;yOR1+c|H3y$aOs>c}4-O%r zzyFbhDJDeso%{o(fsZLSxUIu^j@R?OF&O-4xL5_x&OP4&XYOw__b1lgz7YqOA~_{F z+1=aEo;eehANoT2wekTYL)inW!`mZj_IfJs6Fqq3HgTuG6!I+n<&m(HM=t2QTee=d z{1_s8EMzC@(ycQ>TXyVdcfU5TGUi)SDLCerA z^z@JCW@i@`0HJ+V{TF@nhwYjP52c=QG0mK2KahR<+PD8;3$QWpcXtBzj7mIGH$Y z8#R@S>C;qu?PI=b9;!AhYH^@1Sy}i(^3Hjop=kOG^&A>s+%H z7<{H~CZK~$boLu zOu9PIS$I=LacUlcew^AT(v=Ld^h8zUEoh4MSl5>KOZK#+X>8K=BYz!A{N6Jhr6i>Pqd!6i0Nxy_8WHeeTuTY~TVY_hvw+r+SwMR?m8kaNku^B!r#tj4|NoYuAKclBL zfsAU|E3K%OuUl)Z5c70`q>6I~U6FUn7jpq1lG5E>>cEZ$cUau5^;-f+% zRah6!;h>=@QVAl56_vSJiCQQhzI8oJZH}}Ddqj%$ihh`QUJ^KsnYZM{(cuBUj*hYR z2E8In}KOsfBx}<;2WC z4Q>`!QCgV{WddQ5Oh1&eh&DdHn3qwZt?7w*v#%E32C;GYfH^gp8Gteggs-zYPL@WM zX?{SS-4174$`WgJ4N<)rt)b^*5EhDRb1hmAk~mPPmtMf?L}HI~#P|d$87Ey|4K|^= ziZLZjz`AN2g-YQZXOwt+m(zJ+9tD`ZA_r9HhvwgNv#m&rb34uiZ9F+Xy!?Z@;9s_n zhKE1)k>}+Rd@VAXwEv==b?9>#Z_Ep`LYS~HU_!ANVnuc}p>U5Ys#Qiwb~%%0KyFT< zT0GH_k7tV9FlHUx1Z=^wBD=i5^N>2cr5&MspDHHJ zTgR}=aYT=WlYZItn-c{}8Q-a)Asm~xWUDiDCm00hST4sBHCegkQY)oxv6}Qo$yPu+ zqwi5gwGqq3c_eb%-x)la5&l77+Ohk~t>n9>9sj6WA?b>v3Gvk^>7)d!Pm%C~Ta4c4 zhw*@V^et7PMBt6EN2 z8Ce-GFuJoIxr$D@8XtFenm}5)Kim(5XB*j`p0hzyt`|Z`*Y=&r!KO#=e%o>a8_j%E zkY6Y&qXcqPyrUEeW76Zt-_u`@(o)Q6o0`+rq5xjz)+6&1h`!(yE?AS?PlEA}rHlHt zA-tX$1H6twMn@6gAV~!h;0xrd)G_0v>pOkMkjJgHD%X@X2^;_NEBnVL;h&c}b;qsP zNuGl$E_nQ#yTP5+PS>J>25o8#%B<=KA!BfMjgoEhMF zt^HZlJ9QPye-+-LjsSbD5#4_g-T}!8gX|I4_9fTZBAu?S^kmh3j%Mx+6Rc0UF?KvT zrTY_hcz;_41*jO#nm4vF!fUzkqau?zCR zpc+nCRs5YzCeZgiHd!SMdqeDoET1$GM-NZFLBS=)T2q1HTqH?~lK8SORrg^<-_z z0j{txPHkSf{<)2KL-@~sPj^sPy-u-1fK z|;ROh4U)y)?rd1vd+_juDLkXqW?#n}uMrta6iQ@}WHWG^92 zgsd?1&W?9$Yv>1KXXeMlCMLp@)~=0_qQ{HWO8We%CShDNtE_c9T&VG zK^1$E(IR$FrzPRhCozlBYQQG&Kc<6cg=RUDnv#-z2$xO0=&gU z#;dxsAHLqVD_}Z)ITYOeD=&r#g5uiCvJgpeV4wL_cJcWIaYFLbiARE=Kp20aiHb>) zmd%aWOFXahdxntFjSr_RMa8S`EGc7@X|3J$b}nCm{+guf^-K!37?P$$rtlSUpeb0) zY2mOm?Fzcl9z4TD6lSwzU^$(Dx~T zvcjbOnGHI ziY)`i-Oc%5Mnt^eCI@MK4fcV!EN^6m=iG-A4xCWu`#sZKDhMVzxbLLXrn7y6#}-2^ z`S(4mj?)mMO09p&C9{q95yiPr-`n)HuflO}z}(76i)}KC#u0t06&yVY&;DN{ILyA9 zE<1{=BYTJ)9Uc8oZ0-Mp7VW>OWPg0AeE&I>%x7DS6axs)*10jYz&iNrs<{7jdOq`sC>|7h1Ck_2s*xy35|$UqEKBg)ZLkz5S9)ag!$&16qM^uC*vpQ&YzJb zPXsEl#m2$mOY)&moERF0#We8p~}F%qeeXS0Fj*?aPbbY?tTD%OkLC)&X1O@1jQ zm>ZUG*r6mo0mb|KqZF|d?xXSfc6O&Dv8WcZNno;X=!c-aVS8cMM3u?Up}B%y1n!ayrGg{I{N>IQ6QUvf6uY|HE^er8Q!<5Q%G@}9~2mP6`T|mZm zO6f@o^&mCRblm@r$IsF{o~PX4@eMU)YQp!O94Az1~P_jN4Os)4&F`ceRc$ zBQvAMK$7Ry&PzXLAI!6bmxl;$ndKettLMG-tbm0Ke=SYI9JUjPkUUZGcP?td&@Ad3 z-LddAYZ~(epPB?xfx<2>Y@uv}Q6?Hv5{`pduh6l(ETDWqkG=uyo(}phPhX}LRfcX9 zfSLic!Q{Lq=_eHv%~FVY6HyENwXc&=#ASxVPMVtjd)X(u3!7ey#U!-~Nd+;(m6jN( znSAQoVO4jTwZsD*bi_|Qz^PP=#%SFpOJRi$D(=J$VI9W8{5j1tlFIe^$(&4wp_%70 z-*?2eK2hk+#%tG3i1Nrw|BxAceCG+Cy2jQrHoM;O^lyhn{%!}o+kbOE+xXD!0ums= zjD*k^Qf;GObZ0%zaJU7kGLLA7Qo6IaF*ZiY5$4-*coqlBhd_HyKi!W{82nud;>qDO zYN%!B#L^?+3SbS@$Iw3q_QU00qm%lA%dS6ScIf~9M&@WdR#6J3TtB#_O0@RL?pRfc zSS$}cN&q#>72OI460qPG>g)8^j$PpL5X;bMPJm0)MZDF)Pv}E9N$rTWHbkL@a8+c) zb8Sp(bRX0Wm;+5jYdLYGgU^3{WD*-Y{CVs&ky-hpm}C(tf4C-dSC{yCq|E=(HQChR zZHNx~W@ti&y4;w$dZ0hkD7Ud*;VRs-FzXTNky4??m@z{oFD`{DCr8m3*6AthJFM+F znF(PtULuto&*$4$0McUYyM-jF`iAnCM6bQ=J;TGsS&xp-xAMsv@rE}^`!D=_e(Xy0 zNfdz)r1eC?b7m}y?Ww4N1>>*u^nm_YJZfg_ZY!B&#>aCiQ59``-8$3lNA06P zJA0ixO0(yg`4V?E{xV8WQ3op)UiA--!OD>HT60E8!Nb{EIRr_>+@-HG!hhK`IEbSM z$1`5GE@SRa3Bh#Qyo2oO&Pd4r%`{k9?23%kAVx@$G^jrGH`n0KzqtngAL`yc9_sx4 z|DRH+C6bm9k}|bU$vTX|R5p@OS(ThZvWYN`!!T?`65~(~8DmMwD1m6j)(cWPCM=(k8XebFkCbP2gB2(Plk&5HgE;gRaFy!SdWKLH5KQineUpUlC zLvt3$VV9A9(_e#PHn{(--J1OIRp ziaM|G?Il=DShBm9LbRSht-ZS59DhTqkz-z`BI3Ie-25ME%GCBYxYkPo;G`6hf|O*3 zzK^r1A>UhO#Uwtb+mz(-LGE?z-GD)M3;!(zEMteRo?h7|Fiy-4GWW4GzSH(ncu>_09LinkCdq3mmQb~4AuQ}-wO*`??X z{HLUh@0&eYe^yeqk`G3@6umaE|I{oukzN;Uhz4S+tG7I#ezhKIu zJ1$^r%IhEBw*P2W78Fs9TiukD)z>$Oe1zxa@U9!0CUqYj&D{OIH6l+L|B$GSmU(4K zmfB_RarsN`>wGSm;ll&A$6VX4?pqsIV0 zRGO-1+g3qHH(Dx}UZ)gXkzLQMy=1kTzRPbWDM@r;?4pEH<8@0a;EDg7JFPFlBZiz= zpi*y3dqP|%t^|1hE$>t0X>lvydqDd*-I}og!^2CKEy_x4A)CYeHYY<%WNtryDHt|T zf3lMZ^K3lhU>q>|k`ihkr6+G2gBN9(cAXYyXGR?yecjk*WQ-=JxtPL-p5QA1oia$? z+u)u#bUnsc{&vOYD1AMvXU__iu#Zh3bP9@b`a&zF&9V2RZSQ|xGiLS5)H;a%@JLL^ zN%MGIgB+IsJLv?63T+H`n((c@hz84~mzapkPd4kCdnVPvNlFZ+PE> zRRcjuu8~);)_`a?hP&=T#|hT9!rYp$Nm^mRb5-!^b3?3#GoCD+`)P`hMM~COP4)5} z*3-*)-~2`x1;$gbV*egrf(bv6q@#&?9o{TlGJ&6d;6}`)z;~LO3`+3yoqBubSD~4d z06kOi`&k(VW!#ON|Il1pG?34psl+Oj&E}8X_fK1#@$MBzC=OOIMw$JReHHepkUaf z*Y!V=v)TL=IomQcR?Cy&ri&cA3eBl7X`O4bd<2NLbw*B;{L4^>;G=GvN3M;6;bl?k zFzTS6gz2Z5vrTvG#v2lnZlHeSC~EQ{qV)>bL#4ID4i5Jgrv;Q1FPap87$OBNxJ(sR zMBm@r)K4geQ3Oe?34U)EftT%>6|3VuZuipsDQY!YN(;sI-+kt77Bj-FHh3dKW1>IHzs+V1k$#Bt5+QFl--CE{ zf_5!zM)n$dsdIJz z?%0PBo_*4XJ=jwvR&4;5&5n3uHil|Hzol=g7gwu2ZEz;O|rX^Xs!~_Yt z^FAAj1g2{2WrfXo{o3zeD*Y_J?FYY-?^EyDidc<=9OcIN>N+%ZSv|Lye5L9z`Br7~ zyBsV6${!o3B4XhBr%p-WTo%;BI2JGU?LnONU%jdKk#SkgYiT#Yojhl|43!uR#EVO+ zP$mX@rU>&k*dL(DYEgbmWKgx)A&nc(TRz7Tsgqh-mN^wOrOa>_bPAebVEvuJ)M+c( zUY9C=R2O`(`?+d-K$qgo2^XJU6fLoQA%cj}b40#_iIcUbJlv_E>7 z*qza$W&cq@n+>L1bwcox-9V~0ntjlt8U3wiy9t-|t``S$QY1KJa3Rm{c*Z?kpCk3jEvNFqgg+}nBG$I13p)LHq`U5ZV>wx!09IygLQ+7&;A=+^ z6>$=c7(e@`Kg@B;va?`kA+tviVT4$ia146G-VC~ovpZA-jaQT9q>daGj z-<#=*o-6;56kbIWJNaK=9P8@``1T72<(UURk{R<_mXvMhVWN$a?k&U8l)qCG( zV)}MnIt1y1?30)J{in5+U1GBx{(SmoDgbH?5!zAn2O*ky3b&ue7ue24pr8*>P>cE%e zupa3|>!8hJ)F)3#2D{!9UZUQ_rdrKB(DFVC^&|-P*4rgY?TH_{e&@V^=n>qV=yE!% z-96#;(r?m7ekmC+nVA0<=&p7Xbf;r6oEhHQ+I&euDKyIwN>1eiZfFfS1AONUlQQvB zM0`A*+KG4fZO{|<*kNr;VaUG$Am@~n6#I$&oc^m@)FH~j-RxJpAc|}CDl|%GtLSNV zs{hh=(2f2f`>YTr?VDqHKQV5p?O>H7SpCe5ey`*qNmcfE5u6lW+;?N9d@7D6mFRNA zi{drK9M_UC)18z&%SYNwh-#auOlMCB@c4FB`b}SL^;uu%3QCbq0VrY_-;LK#9VA>Y zs!@bD;DfAYCV3EbF=CxlP=+xBcq?~WE{7!fOuVS~Rk32`M%-I(OBSN}9G+wA0=Ih~ zWj|QqJ=K=jf!2*%Q_(sUhZai&qF+G`4Jtcx}6A7g&20u`Lcoh29*Bn}y8IzE! zDwI@3i769ot4S7@EWt^Gj*4H_i zWjIz$+YTG9g}opSQBqek*9xXZR)46?jMA7cW2$A@lGbCozRlYBscnIV8EQ>tZQ=lh z3!6yE9HOnmu}ZCL?$_epk<)Ym=kqrlpshlD^7H3y00+o_Wvgy#DaoR zOC>E9xk8Iuc6e&tAPfnqdRp8>{9%QTN`Gc3Q_t<2I~62F@V1&GAnS^&;L@Jy&c!Ek z;mklLwL$Cka*}n(+`#+` z)S^?4NYPSQAn&aIl694p_8dd;X`)M+zph+xtu?EU*&(du^7+Mkod|fg#kH!uN9C*% z%q6S&4&gWu^}|CG7Y=w+K$GO&C|+;gDY=1;$m(+#d7D$!>2FhthD}>Ab?x4ReCpLJn7vuY2?-_k~5g)w*{5D#eF;-9*|A*I8A; zqY~nWye;q#O>Bs0rq1+&G4IOx$;H^E>kCBJo%07>%M$`u5fXVjRpMfsU zO&cH&Irb`B+yH~ZW2&EBvotl*ntmJ9;4;3g8eDl?x@Yr7cKOPw4ne2!P{z1i!e&s{M}My?wcFXW_u%H2rv zX&JJgHym3o>ON3OTwcR?k~iN9UP!?7>#62F8$M??FGdbTUa@x#y;EJgLulvp)|Uf( zX0QRv-p$JRau-x5yiIbqo%(#>YFZ6<%|sAe#(7>gx8g-Po26{tDe4I#+#WST{zBu> zx?@v^rLC!|jnV$v(b4xuC&=G^$$Y5g#8OT@AgO#&gjyT-{{^ryD>6?*WU1}*asHna zbqy7g{w81}GbpXIbA)drJ8%f`dytoyY!Ek?r{%j?m_%qzzu88#UTZ|eqTJ^j#JO?` zHP{V?i0?4#&rNOVf%56xtBI+LmR0Z4*(B3Bc|R(363?njvrZiq7E|KgkP3zJB^?}1 z`dDzK>bZtgFzmSFt;)v|MEf*_!Yj(l8LzbC)NLDe9yP%VZ5;r8Oi_JH(q!eYq{&(1 z{srT3T!>%&;Pj4cqq+1;9>eD53ZGSLu;OAGaV;NjnEHu9deLCC-)+YB5s3`jdp;=G z$lr0O!N?f-v6t;jccM~x&;$Y$oEc3})mi;P`U3ExH0k>_rHLFCU zP>goyl6AiH1{S}{VlFHC>31W;J~Zb~A~vkG%?H+oj2F}R`!`@T7k;0B6_og?k+26{ z=-GPYWcLPn&AZ1dk@Tn8=;#KJ_xW7|Ncszm(#dzly{+)4u*EjlNIPS#EQ_TNcbhvUtBhAjV_I4C zMRV-<06V33CPOE7Ry;$eCBen#TwEOHjU!~PyK4CXGrbLcq1z)S^xnz&q27BHM!3&o zYEAt{u&I|!gu=RGL_cSEjB^GyS2cZ2b)5LZY7_g^R!XLir+ ztfrA-p8;hBdRt^wb$QXPI`oAMj)$-5EbZN~?5xKNUug}7Z#(?g%Y@q6%sP7Y^=zgb|zRd;s4uPcd! zO0V#$7v9OAbssgj!ZEb$o7KKI%fvQRmA0)cXXPs9YBG}6SG*@dWNMCekKbV=tx)Z0 zoFrz{(F8xg0Daaa!5Gf3yPeqj2u^+1+3cw{(APV-Hfq-_xYS*MC~kK4W|#N*x8*jc zcn_wjc&`d8Y}~eqKUovE8{yvi<=TD+F^J|$d@U)!7-QS9YpIa-wz8_p$@&NM`+&CN zJe<*ET+0bo`KfHi`&{vZ?>xYZ5%t$zj3*HhUXtSGFo@52`DXflo%8hRYVleOCBgjp z8=j#STZzX$UbkPKB8Tt~J&}+kfZ@RHUnrrWia;?!NG1%9`WWilgL2`v2=hsoN z*UO)A_u8|a4!F(+UfEe~PR7?(Q5k=^YWwn#!A!1q4?*uKVzr`yKmBQ#HtG&)ZKvck z9UVSvtyqdV@8Zned;5Up!yv_N$tX_MQ`yS(e$yYG=6?d=N`fGcUK3m|xNSe%LtGEL z(QF)j^-ESh<6~zzUq+D~W|D_?mkbYkKPy?}x09~r3gneZ_Gz(kYom0sXX(Q!-@EIl?v%Y(E{EM%QeD~IpQKyR-&gns!iID~@s>i)8}{pR{O1yGc%A)0R$ zf_uTFju7u@doQy;l!X3q!ErKV@{tSo;+%~gBtk=AQX0_AUV06u6hM}eu@fT?c^Hx*wFZCsH z-%sq-x$sz^OZBn;@pAb75US1eeL}jB%BfHBlG_kV=WX5F0L#oBP5r?E8vO0PP(xlV zE)|`CPvpU}aBOlV%A8JTQ3O0}ug^VF1Z3J>YvWjXodANJPDhA%laXdcYc5ydJP8K_ zd-gqBq!I3?uy$)6y)#?tsJ)ubDz|Cxh(5{uR-~)~DFbYLykuPt_`he_>iDFOml~ zPVa)aR4y(tOGuSgIps6K%$X+L2ABS6w*G$B;=Xtjhlt3p!s*Pv3HLg*CGJ%R zDQx>FedD`_frU}L`7}42NxW#uz7J*$ixy2#Kv4(za z9ELkc+?5xLNwvkY8_XQRT_3G1Lnzt{O^QoJ_yN?l63#30Rd+Bd9Fi*1{%LP>NUM)d z_ed1n^YUFdr6@Q$%VUF;?(KCy5LAb2w~2EqHO6@V3*G3>l_VES@OaBc#%K$xJBg%9 z)Q2af1tJQtvA3(=R+#cbIGw!%*S!Yq8@jK+dwY;K1_y8XoCgllRTdH)JMoKFz`FSO zT*{w+rj%d)H}gQ<#c!j#Wso1cn@Inp(T=rv0~l@OKfMFwFaHgrMd=|sF-4m&+Szo3 zTM5Q=4Mfm3HC;Hgd>(^N*h%Woz;i+k_b#ytu65GSGAFl!(K?loTXg1k1EU45Pimb3 z(Bj1^FVitzGY^jn1AwMv$@$6X82CQr#IG>gD#-XmoG6|Ap}C^xdFZiS2w5Ps_8({y zhKO*?i=Ir$Zm~sndh+%7CgqkF9rAB3d z86VTU>{3#=oSlsXb@H>#JNdFX@THpf_GCS_yE*GTyD=tWy#qa)h&^FUacEO;cIJkx zOb(uDNV+N{Kic-=Y+O=N|0__b_2MeL{C|Ma{Du2xGkWf;K;D6KcSUmD0@W6x-9Fg= z7q926aDjN`Q(&qK#(?jveuhDVJL0d|jz3BC=<0Nv6tKb;r zwZq|bWu-;@Kz65v# z>y{Jx;*O&c;}oRvWUz?R1ZiL|B;xa(zGDXOUT)#>t*$@+<^4fO`7&ZwwoPMvcGsLl z>4tmrpu`+|o4Mche#jRkXjK_{@%7y`u2X29bLK#VRt7i&{nKoRxU9?X<69 z7s3xUAdsu*J?O63U^L)EwT>IxV03EugQtkqp0K1bT`Y_9&z?Z*GdvYHvY4y}`ehbg zQ>sn#OMK9__uO|OuKt*qHp`_&CjYE@6{gp2nNnE3@pfd@J&U#TFVTA? zBEW5!F9vzK-AWEMlLO-N?ld|@*&w(={6K=AI6yEbE%a<BesF7kp#nv%vgHKBxESy%d0_j+X~!9QDD8=& z|HmemHHXs*fmiUHTL1A-yzhi$V@a*6m2W$A-JN@qXru*F%66?#Ot>T&jC2QNrU80} znD8*tn?oM1o9~rOnP>5DQDjxW+s~oF3&{dW+Mlww^qgs zIEC~LXqB~U?=8-Eoxve&@aoqJm8YS{*3=eD(l^#gBxO9icU{CDbWf-r>q^J!rILA0 zRsLeEIWI+Z0rKT*wWanBmJ!Mq_NMcf(|8tTqs&{G&(3p0xKE<~f}FofX#0xf72up} z>iGf$JlV~gK&XqnIZDY7k`iQgt(;nWARn!1`zvvHznIvf09(L`dP?%#p^kdHbUrvL zQ_0E2{qA*PlHX4h2Jui&A=btGk=6Qq>l^E85<=4Ns+BOP}dr`vvsVU9jiycY) zbl77Q6#zw;*2>>f%=gCO1`6qDL8ou}r9(~A`A=Pa%RSqUB-~_EKm$TM2 z-*Si+R4wj3U?wDggN#@#oyw6NQ?#JqFU!ctH0wi?DZSt}T9Ci^*?f77`=teHdM}OE zfQLnvZnn9_(~e=hJ5D!_O;vYaE#SrN-Jud2z!UhU_4@ zS2eS$Jr3cjDuTGW)7UTx>*9O#G@a*ZCGh`^E^ZBKjvXe}Rpi z?&BnY`z{LYmUk?yRK0y23N7O8q-6z>&&(COQBGYKmUI{`q%@I^@F$5>3#8mZ(4* z{lC~|qKa*-0fjm1n@3g7kK~1I(gonr2J`<$Vb1s#a+(-&G`ZojwC5v3BfyV}l`19L zI*kyd$!+T(&tdh-{To!k5QllYxaUd#!#J~$ru$%(b$z$PKurWS0C*kfhbCU2!VB0Exf&l&$;!m) z^R4$>{{wEdArOt%>sq4EJ2HeZ%)iTO6!=Ozx_F0n(YF|`sQ@4Hg+nM@W=N_+z}3l< zk$Q@$;bS-saYQFiVDl13ZuJ)gD`TUX_#4FhMT1;yR`#mO`|by4DwpwIeNH(8Ucf+hVzcL8o$vY11+y;O+?kwbEUDew zCE({^In3R$BDa0w!(kj$=hzE)1pX z?t*0XET1+G@B7x=Z<*x|WtZ4ZLX(qxX2K#6+D@$T7_^5IuHaf>Okap7@X9&964pKn zL^5J3f+SRMveb+iyk)`53+RpFHpIvcS%>j70?NEAN!E_W>V_EDd3!!{BAe_kE1#l2~h8c-VgEDg%(d8 zjt>AZB16YiC}a0Jp*=){SRY&ZiCh2UgQcsJp1zX> zoH>5dpahDlL3?w8^?Y_c56$k#jWzaPd2IG;$Jm7R{}IMMhq+PIV_RTmcXGgM%#!vq zcD;?+-e#?Ow?$HOqL}nT5q%G}FjLktS;cO?OPU(=8hE4gKvH{NviTl-_T*iwyC8PX z^y?zmppxm5b!Z2>7CLKg<@pgGr>BYTRW0n=aBm+*cKB&uQm7byJs?CwwfS6t4Q1$* zj$GrcPa>QB5Z{mRgtT!gpik}i*29n=fI^6;RUMj1>v)(R7vfZT2P46G`~^`l9d5s@ z@%=j)GvUofV{W#dF{_T*MQWfI8KC;3xS#f7yu4vcZwpps;Sfs7U$GpCJ%RiRL;s%~ zY^;6EDBgxN8Hdyl4pxuR$mlp<))nOf>&(lRmJ&<_7h0>g z(c&>Q7BQiJNPEY>IoMbWPznF*@!zKCGDFt;VQ~qcN;(?tgMt2thma22>n<{xKWuR5 z5>krEmG@f9$?-4>qC~lJKdEly(F<-BFdEcth_kR&m!=l3EQIc>ofFrhWOfe#x1aXn z%8|p-l!fE%=&ilp+R~&G`1^uQ=KomRlhp8V_Wc8z>N^r z%)2RJ+JLqEckp{vhA3)8Z(JyY?bg)O@7O-vgd`c?Qv^BT@#0dc(Zb z;|`F3T>r6v@9(hUahR7^m1E8UO2&Na>!szR+FGFo&bEv+Z&Pk$o^&4;&Fle-zR|jl zn1c^kpDt{_CiY_z@v^3HYl1=go+699*Oq7r95=BwxsO^%px7E)d)ZP(NUl~Yd;63E z0uIdJIFuN?q+HQLu9T(G+EtIEFc6fbf>cAxt$t~ccyA;pThcUg$l6cXX~KXv`ne>K zgNQ16LL#M3Z}I4V*9ZLX%@btDL5Kx_#7_xBgu6yS*$pI~JOp>YIeqvLaFm7Gz`DX+aMRYR_?zC!r1$;OsW4Dc4mpp+-uzB`(&zg>o4k>M<)6-Rv%k?PjU zipC;*eQ)aIDbsZW(3zJFxjyD`^PzCt?n@kQvNz`SK0^`2E5kR!0KuH4fRL#qzZcSS z!?i~(9O2X7YkPfn5d~&9W+bvNRcMU*cDdpvaLKNqBRUl!SI_=_qxvrz$rc*CEi#?J zw)&&MO-N)y3Tk8|=9BBk3v#?2O7jm+`qc@u0htS(uxI2+vX6%oL0RyeR_cfMSn5>Z zIK#m~_Zy(eEHGgl18Zq9!tNy&Wx|**pq1XIqQp8?`>mEXeS9Lp-4S3kGsXO_gA|4m zLd=7KffK&H(y$VKRKYh*S^vRw=L%MgkQbJ5P?s5lWJrk6q0tjHA0uu(+6xKgfD2F$NCCf(~gEWn70Ztdu8R2HH@z z$#loaetP|SFYxRC* zL+6XY$Fpm_G4V!1j9G>+-O+>x!DH>{-kOwWZzZb*hIvT$`jEG%62KB78zY7Zm+@BQ z$2UpnYpYNhw`rJGbe!L1#o5EJ3L6@duJD*ortqJC&U-LXhfP26xHav_9ioKfUX&b+ zPHY&o3ifGbMN$RYBE?qDi|IM73gQ)MHV#oS8g#Ng1}MTBniJqhLeqD7c85v{NhxSW z8yt#$QQnuJ-0@keYB~w{b2rMNE5t8t{V(khxxgf)>d=bIFWc{1~9;S8L`uT>@%9E&fj2aat)*uj=ty_g8IJV z10hPUgrj{y6hoV3M%-F4A@iI>zz*|Ohgcp-uT~HQI;7xi?1UpoJENI|vAq*fzO1~< zDT}ne&(dDOsSMtRNPu*g_*{BNsLAeBs;*`Y?TCeTtus-u7Unsw{3fQ&(S3@*9TE|# z=Q4RYPI<9IGD(!T`-L>oemufm%-|w(UdIGpL~ewwhfGC@C_t$aRNIca6kb+qQmJ>uNg9CZ6nTun_dM zjkiDBP=DBD;kB0rJo^1<+x@*WRC^)W3P!p%iZX#s1&XxmRQ@T-b?W|JK68OYcV;HO z$8;JwCq?N*_^X@TKPS0FKAR5xS>D$nW20J9UwiQiywc43dA1QV(&D>ckTSwrV|0t7 z*dxIt*N88Y5&B8wo9Wg8KO$jcQ9(iSu<`SbDI*4$g{!B09%;#{P|PMm5H6w-Lw`(k zw-JZ*rHXNYLtWu-DO#8I{JPXmgsav=zP#{MO0Rpf-wzO85-NsUGzERHj+XA%xhJIR zfjqdX0|jZGmkORy0OCLm)nw=o#%Tu&OHaJxI z=C#*ZUe%-i(Q(Ptd3&u@hdgX@)44X3PrB|ZG(!B29Y`oT^)5uQ#B_Sioqva9^mANh z`{z;IyK(131WK>wq`TESR^^(E?$nt2`u3ZD8_*rL$P>tWHar}w{EPR^O`!Yh{{p(R zeh+ld-7$>CCZQjQo}Ur+^W7IlOs*sd=wax@SKN#7JSm9fFHaPK&C-3+R__XQjC|3; z7J1ucEo7(HD&L@@XQr~wPenjDHio2Liho5xo^ZmI9Pm}R@kyIcYe{vN4{rVsf$k{1 zRf0p>)m4*_7v&4adzbp)aFy}41WnsWut`kk^V(tE8>1z0!4JA%Hr0{Fp7~qe zr^7)S-0yDK^8GoeP(`@St5EmJ$os9y?3Qz& zfjEM_L6kwL3}@v8X|PPBm0C=r@BmT%$YAibSB(h5zn9&|Wj+(zS7fvb#ouW0bp!nZ zNa+(~HrYwB?CjE^s_YU$zusaXyRF-my^NnLHVkh2{?R@)If~CEg(!p3D0&H3oQs{g zmeK@1q;RDKsuWrq8&ul&P`esPZ5MKLj2?;P!1~mHn$wT;@V)kf8{{9ZBx(WjT6$}q z1OkpCTAWmY!7d{3f2Ze40 zhYlSZCb)xTmse}3%^2<-wV^fn+@Y0(ZpSG*gQOzk$*8W$Man08V+sE&a4klPH2J3e z=P=D-_jFvZwsQp~GX!)A+QZTlaI{eyh1=_!Z2jY>EhGTXy>^r5j#Bq+r7|OTFOm1e zFBnYYxFGPF2*tw$rSH}H`2AL63SMgf^26jSuxZPPD!T-ATfim*8_Qma{S9X`bhJUq zLxMzDJ~1VLubzp!KKxNw!7~3Az)afPqb&cXS83l(^*d-=+splYS+ZQ`d3!)ExvlDV z0HR?#7xg%TKk1>?DW@>R5}oJ}8R^?{v2gv70k*}2W?`9>TWB|ud>+Y=rbA)SLAq0+KCJIEj0P< z+EQNkSRRKt^RBBGn8;!;IDvy>cU;4e9y6l|;YM^2&_S;i{R8KYhDCCmD~hfm^Q21P zORC&{w%ssyY*7H6mEXZ*?HeihK41WBi4t2Al+y!tM2>B>z5PFQ1(T5-jps!&-StxD zM;SY-?@!rY1+*U#-J1Hd6v9{wu9JMhynh$?i%XxYAcOSP$|4~*mTkJiS*z7FAun5i zYa9p5=B6{ykmtLVShlqh@@`G`4av_lS0eM+rA$moPz?;j^iN24}N+}q*t7xd;3Bvw7d!BE;q{sRE zW*#J!vwiGLjWOtn`$mV>Gy8kM&~5kP#C`EI4SM~QZt1>MWW6O>-{~?JEF1 zsM-kPhsy1LM!O?=Uyb$;7Qmk{@C8EdUz#6nm6vuOJN4Btd`xMKSo6W@$I;|dKM6~6 z#_0fOlw`33uJI?y?v)&2IDCcW?$Qc!I}raf+5Pr6L3j7t_WVqAe|5R{`#&PP`&?R} z-aa1Dce*AdNqPCa#JW2k#5FJ8nW80wkQJh&_0q!ZKh0jjf6?sqe|YbFH+@)}WOp=& z4OEg+#Vs~UiA0=m^chVLHW8%rZi>323b$(Z%l|fn` z07WBc`w3jwm)5%W(4mVaw(U{XKaB0?EhgCMfi1{*M~GG-5WqEPfqx|4ppNA<>0_9- z(hAno(%QhTJt#|{yfbN?2ui9X)3N|acKCWzlQ~1c81aCUDI(?vKi!CWXQkq)GGJW= zc{lOXI@ayZI`;D4Q}H1|Q2-|$(g4h%K$m^`q9;fy4-}s_+C6VH&O0>Z60&jXmk|89 zdtSGb)g2llE@2-kGRV$%ZHy1CI2#V<(X6OPh_{AF<`htN`Omocfgz?PLm=d62n)EM z$oAU2LwySLruP#16@7dBX3iT;+Cq!M8&q}npR6TxL>~G62ldXQsBT8e*eTO#NnF@a z+Xb}5uVnY3@lZXz{7!zYykNhmILY95L=&;3q-QTQZTDaMWR#&VK5Ta0!)v$`x;~Qb z1;6zOq14?361x{7uo~mLD~Wj{=GVbK0Z<%B9mm*Z+5d;PX^TltM(ue|mdgr&^Eufb z;R<|Tb9n#!rSp}QU3@J{g3pu*<1MQ8LScQXyOQ30w#NEnS%k~bLKEpicj$13vS;X- z#?XC&cNU9`98I9g*3NRiw@We%HF^BJ=u~6`u|Y)Z;ztuG2)$xu#H=05Ei_&JW#8MJ zvuBPPg7{3r_YJWmnMy4HE5k@U(}38z-YfFuB}oMtgoBKW$^Bh?AKmWF3X1zp{?Zwz zxJrP^_yzBr_{2wz!gGko+y6A{e7IyidCT>rQd2`jxRvllW5W+)CO9^C=HK%J1ww!n z^(r@HEIeF3r=fPzRwC?-`t4WOTc9>Nx8V)-Mu!-?HSXVU(RndqEH~DoZU641@-^0V zoLN(*BQ&%2mjfCdOBOa}HY4Id%1(4M+E`LZ=)Ry?2$FrHmT(+dP1)63m0{|R0EvnW zA*bjDS0dAgN~xpwGL`evs{`G}PhWhF+|zpJfw)$jfwBVr9p!aqn1MX=U@QQ>nC;WU2QXwF9US)QxA$Yfgy?=N=!vvSa7=>$Zv+M_0O|59ZZBz8))a z+Hl7Oz}@^8yTys6s{8?LoWaUaWvsOM_a6{Nbm zZK2;;Q)+_|1{WBF+NbBV(JRqbe*42*We|&$5P(=(c%cC0M>Wxm_?C%LVc~H9?!p?~ zy+%6_XLzXIg>AB%Qx0_0Iw;%;Onz+Pvz9g8@~ z+-Hk4&ZfWwkd*EV8!d^Vp*E^$@(*nnO{Z@+({WKlsJvqLTdD&H&rUEwm7Ed5c<+CE zzn_>nR1W%JO(4 z#-62Vqj!6IETw%6J@>MJ>(f$QTQm2^v;;PrJvH2Tqd_I`W1DKdJH+- zko>|n_f>0hfxo_o6%NO1ct|l!{LUH(q-r4#@dD4ws=N0(&?i@|Nkp_e2#W3wIYNWB!9Lji@Kr>QUKJn02 zHu`{cj`M-FA4~4+y3XtomeDTE*akU@*x^BsA|j8Jq$8GD!)^M!#;1>}G8TBraw}1Z zCB3Zi3Aib5C0Q35%q_tHZis$c$#sH#lcJZ?`Bm2=u+a1_5zlR|_Y#y+)(%0p{Y}?W z5zn#R2?b8uT)ST9JJi)0nRw+;{B4^eVz~WUUwefGgwm*IZY23O4N;BeDTKlRWC<9A zD&-ZX6xh|hlsaqScoQ1|QUg>v5#Fui#AC@8$zL_&1ybG1FO58ayHp+qQ?~OojBYv0 z%UH0^*>_UB>4>>igx@zN(p>F0Xn@eCMr|*bg((f@J(X{6DqTx3-MdR+S%v6OEP4XFa#>1WK zH}w0Jg+Odp;Vs5+DHo;4Md#D+orQl~&bMgezHXU8sGD z+tF-9LTMUH@%hwx1wmu&)!2R@$}VVomZZ3p(pVRfY%xRE9kMI_=7sg-K0UUNKc)6a z1Uz6ECQY@G4hexn&+-+xj%h_Fa!fwy%MYVA=$ZB$$H}P_J1Eq6I9__4VJ|FKa2c^K zm?(;4jJ^#3I8K!LXy4*A|YW=jQi=5GYu}zp1i~M$blv zf#goC#Zk|uCSKx2+E=1GH$-dw%Key9)TwLc$^_z&-JKHWC=8h@Bst^|i&dJ^cJXi0-AhuGB?(Q2n%;Dj+CS;; zP(XLj1a$XPTuKwzBvDlQCf)rE{>l~C3l1v7>4yDAU@1)(CUDq)0VDzJZVZC{BXV5CYhBxVQ zN(vZIe!Do-tSwk}9kd)?aY)-X1(7AMJA15cvwGGtNL>s2Y~Q5^44cFpbRr0bB_CQK zXE=6Amzgz5$3j&Y1wW`;@W5y5bez22b(B3X#o-9+kvRdXMl|_Mc3f zH#utz3YiT?{x2#)E#3Ww)j-vxb3KK zXdqqW6z0I#rZtjAGC~S+)+6%OFWsG&yDa?DHZZ~XK+zJnCZO9%;4)S|eHNa6S z@%<~PYqr3imJFW2MqGP4!pszbUlHPw+u>Vt-h5bZ*Om(=;t~UHFs!S`PCb64F-8QRd^Om9*Dy!Mu27Q zeu|rs@GT;Gb)5X=y{^#!R(ahd>-nyS#EC}N%g@uct$_bbf!FxwI1O;2+%H)oq8R{q zvK^T35GCwa<^jJ6iFpBdhkTomla1A4G(n+m;}if<3MdGd6jenp3`>P56HKS?rdtIV zD8h)tI>=X_?}P~}Sln#_1CxpUTe9ZgoY*0xXl0@8*M5#RZ_PSeGE+MBjW;zQ@!k!I z)sG>udRojV+8$${n%TV#KQls^K|F|S1DK&PZlUU6F^MJPvd@aO>zvVpGv3~_gDdYh zo?3GzM-}|nJ-bd|{aE*B?qwpb4@}0dyj@+ajA>h24j9$4dS}<|FgCWZ{OyUZK_7Qi zt9A(A19oi~-gK#FB7v)@%&&x%b?s^BITFXpC+mZne6JIsyIp@a=|u#} z-bIa*Jld-Txpn$h66o>J7ean!xJ>g;0bWaQW7m<*r^K|GO+!y2!-x$@92{kTq7|%{ zCHi^sLxN~|?S+TJH=>Axs>Ikc>UW5tw|=tv4@na{d=aSKOccb+z4FMMeMUQEHsk&!d+<`r<~M^o-O-b@$L zroJhKs6V%!Gr!HO+Tv^L>)g|aCdt$0q$7@ZS@}(WW9``>?seRcUb*&--Au%Muyy|x zK6Gyr?R6GLHG9E9dtwjGb7L+#|8pPVPThvm&m2bH2IJAe19^4UjRoP&06 zuC#qpn$MKv+(OL)i_Nm-vz@1-m)6Hdn!Bnt2K_mD5gT#9Nh`LzT$UwgRi3KJsLP$~ zTppM(vu_j5O|Gk{%=inv(7O=9FFb(&sOaJJWM{S3WNm=pnt|LG0>Je19f1BUK6ErT zX;V9!lm=`45ACd1YDN$qM9C+D{4v+t^~9UTeA*JjOrw8lX9@Uc-ZjA(R?>Lq=eCxF zutV(K(Al%bM(7E=SypCloG93oarDntHy^D#^@I8M_b*9%4U242`ga*w%%IwFmcvOU zaog zuSrz06Z(zPPd_IpX!meKWR`u66PK`_yTyCH{Nwg(Rw#QIyHT1{^Khjh{VMyFvHzqA zNp`tAowIm`qhV9WkeweuPEFgVca^90A*Y;WdBo>1bMZQ)BJ+FNH`l5>P(xW8X%_D5 zie*upAB7;-8d|ERwtry}Ynax9Y^#+I&Q$=uw1AH@RPDQ2$iD7UN>j6M(6S!vLT<~` zd+`Sy##SfbE5nf40Np!8^_GQ-2a|PyH5M>q#J# z$4ct%8j(nf(QN%}q)@~vQRZ4yPuLX7-sS^mrsgu$6)L3fkIqaKW#y$ScvUjv-nD#9 z3E+?3i9l--qp{*c#8`FaJMe$?%<5T0c-o@T@(OA9wiL?t&F`TTx~ynwRVyF9s~CUJ zE&gLs@4Yh9W;3g~GkQrDl^!eKa?OOel$my~9cxp-`ZVI7B`DvHm0VvKqX}BGFRYB8 zi}P@E30N#=zDd7_h@8hv=lAn0P3x_im_aPWl{a#D0=3?Ldc&TZyh|eSqwiXO+WFUb zH1Vq2io&mN$7wmV`j~oW^Os%Jq~9BA)lyxGyIxb^`}wK)>S;wU3dJ`l76n-&i!GM z`iC?&=SmU;3T0;shWWZ@PbImklU%1KsXl*&tA6w>;{YjasP!=Knc5|LhBUfFAux1o zPo8Sk^R>8F)>gkJ6Pz+;7JSvWhJMwzw*IPb6?X8r{Z-#e`&HkHUry5-H41O}Ro^X5!SIt$52F7waDzptVW3R^@lsi}9V~vl4z{ z{4^9^^+5fUgOP|BZSd|58FJ|`HzE^bqnr|eaxKWGjV3LvA?sf_v~IN?KAU9 z#ms6?Uy8(APuS>QZ}}aq&tX}8ce4pY7~e#4^=0ovfXo$RpB!x9CWYz z)RChY)9=l|xql_Vk9*^n8|yqNtKJ%SbN?S}=NZ*hx`%tL=zyRy11dsPz*s0Efi3lMoA|fhHO6W)cX^9jebO;HZKtfAG%H23KXU@6f zoI7*Z`RWH;YiGaj{+H)@eyXLSTaL{|)h|baOMOTOFYcQpP zxYh&I1+4vq_QG^{-5B<)h${>0o|lJ6@RBbbR;yW0^|pX7`d|60KJL#~Ozl&{+aqSy zwg?I5uOEky702FK?yGdp`CU4|z;N9m-7saXuq;yaFsRwj*3HkLKP)0O@;6~E3R+f| zap3AaZC;6tHwd2_TrxiQFKzAMhPHO@))=gDSyr(|_@06eIX@c_+6c9?i~lOFCH*F@ z)vh<0uI&1Bs$MBN{*HQAder_Xz{wyda%_JLN8qiSXxafo``i0Ga_XAvTmJ(OVelIs zV&r~y!U7`?8jhsuS9#`kx8iH2I_l266SxOQD z=Q961#P1Q_e0J!Tg~rtAz1DH*wK7Ia`08<$r!GZEd!KU}Yn4mee|%fRV^fpYs)K3+ zgA~_6A?I<+X(O{1y$2*ufJ3eIB@`KenJk;NlU{LIppwhvZw3*XiBsL+!+5@P}BE@6SYI2Lw@igxbjv6;c(2tvR$#tkOFvj0e zgL{_5Y1(uzJzyNlW3sHMD zKET(v=#}2IIK+%u+tfPAo0Z(MY8%*3KMvF#xA)~nOVIlV?l{=Gey!Zf zLZc2H1XWzf(SF7D$DgLUPiWV0sLr60!BEYA@Fr>}ZYX?h`M$Ko0%cw?eQ2hhuoq%C zXHu}G;a-N+savZXv<-~}_*dEn>UY}46_AsY9w5z!VBj`!`(%N@w|#`Rue6PcAG4L< zcGE;taU7uPgI_DgqL{$DSRC7c9=c31wBKnP6^oX60Bs{ADNTz;FE09xwy`c@YVt6JZEPyP>0434Z#A|8PQ;&Gi4%Fk z+wW6r!|houo5s`G0hRtl4Onf-8#I*5?kTL778HFc6))UPXT zs$QrxOST~JZw$6-14wyR;n?hmZ;Rjf_!GDNw6ZRu5{N@V$iA#(yC9&${)DFW^`Bc< zO*J?VT;Ea5ERCRb)y@MbfE?CUo((TTmR#^?DIZF5TnOI4Do|^7>RxLiIP6*2dbDnA z2o6>u5FBd9)S9kD*m!vyRN_>CAK&9UPTFe!{Xtc&c7}k^?YJ2r)noJMU3OtbPxLm~ zlrimHh2fWCCn>;;4)BgAcDG^^d%cl#5$3zBaufgxdIm;L~j(3}Z{z@64eWi?~$2y8fs?c%%41HZTjFs?&^3s%Tq2kMA3Tv}P8HSv5vBvMofyGtGIuQ7AG`~y>> zHAOtT!lZPlUixQKEsvV_WYN6pl1ff(sp%Vnrb{0dus(=7rLDnHtpXEe9@oVBF5XP8tVr&FJpn|ilH|gO8=~2gmm`7h#y0`vEC}j zul)lTYFYMPhfR+#nHrgy<112=L#zz>PN2uh-%xO??=cPQ+c}=_Rl!~K?+Wh88wTHD zqJsmo$;J_?0cuWr=IFki*n^xwjZ{FvUHH3#8~(e3+vnA<3U0zzmP(u6aPoP^16h5I z#P8d*?=_j4_yyk?t1EDE@QZTx6TN+)^PGt^;t+sQghgELZro6xvVF}_4V7)_5U^V0 zpkW0bow0n52+S#!xImw!Jl$*#!Z8!uQ0ie*TGQv`ze>181BmJSK%jY@CTso|#5c_W zVLTz|F>uXV)s{oj+$jUJo~Xu+jSE9a2W}KHuuhooVmb{pOdjkVvD9aMM0`=2l2T!A ztD4lAS8B*R{zW~!w7x^g9iZ2t? zLT|v-&i_ahmA^B;XgTn>er=>m5}kKon2|Qn5)`qBx)YSyH~_6N<6m6Et(6b$1;xcd z=7X5EB-yfh4#y1-0UFhviv^-^2UasN z;>s|ePJHbCp6`O~DzyKSx_+efO2i0MAdJzv3K~Up*34N-uPq7&baB`{0~OowN)am$ z7JQOOisW+wF`5qd2_eR@k3 zM*kxsd}!F^gW^8M5}Q%_Ufx@mTFI!)=GUBF2r*k2|0ia*r{`~vJl}_bptsdpc1LT= zt)h0PERoEdpx;TF1#UoU9Ahy6q-IS`Ee?Rx45p&&UWd+aNaIDTyC*VI^OePtzCvnn z8<3i|y&&*P7c$tRJ6odo2&r)7F)!B07H)>5xG2t0wPSA1)0HjU9F4=5HyNRTl;c>e zihjrb6G<1+=^c;Ia?vOzbHFiXGC|Zxnl6t^M1JtaztW}4H)U(S8-zwqwS# zYVW_%%GN%;{F^*LaLU22%6}si+an7%TYFJoy`q;J~tM@YBpRIo5QPkiX z-iFM>y`SUs%djCWS(DNu3dIfTL#bjll}l?lfloEkYmpLFZqHUMb;8c4s>apylpDvS zY50E*?9`A*=~7~vfIh655>LRZnW~E-;G_+(kD2}3fG+tYbaT=H`i^@2eLAfhb^`5R?F3yDJ?^3a6dXC+ zov9c!lclSvYE`Ib5YyTzwWgNxgfc03X`W;*v$hO+Z=iVI(`hl=?5g0zVYPtFE`N3O z`hFqs(Z(5F*f2M4V&(mxD|H}7TugoJC8|ZDhS{)bbDBq?QOH`wuxh^T+1;nwTOp=g zAJ*sWg*V*0*}6HE5et~?)Nspv(EI^MS}>0t%rIe z8d1_v5qP^7Hyn7;2AxOL^9>C~MR}7j>JNfd?}(0L2}(OlP7k@1JDaZiXe?L+DXY)i zu4;ku8=U*iF%g8C@aoE?x5&WI^%WiAdVn9Wu#&|1D3vkTP{Qw{ZCfwt^&5+gMz4ET zI(nzk+QL8jC67#QKBU0^eMC5dx&NsuC}K5PcR}a%i7q>V$`=t;zC^u|j#nx7R!KQ? zObR$TfTkK$OZ(H}Z`IHTaCHDPwQ?S+R~d zWYy7Se12zRrP5!=mc(XDd|7F6or77!psfWYl3){T|UA=93Vc#=KMp2rBO5CYI(6& zf$&D`U^hj$RRtKjT@QPJ;_v?!EUU+MGqjvZW@Lz&KG`~oX_B^48wp!7TD__&tn@&8 z+824O>EP+Imui@&mOSRu!qz&2U6J;@4%BuUE^LOJmvR<_aD7h&;wrD2>dpjk!!?C& z|2}13)u+L~mMaN}6})NH)YDn}5)SIa%H$6ePbs$4RIDWTuuk2U|=e+S>9~ zl9!IkF;?(st@WE!ZyqrEydi?nS33s08Mc+dKqyS*mKM%7j?~Jt%Bh76TYFAhcCy0R zinsxX$g}_8E+HO0<=*p_mg!t%aDhpE0Q6lM;(*4&I$004_5iYOG8IzT`*@$d-E;81EfXR5|~;E=%)R<*i9f>k@XY^2=t*IJV-$ z!4QT<_&Wu)p|UWFHXrz@a&0-qCtL3DL;XP2FEpWinrLe^pFz+G+}O}aV0>>OpnZ(} zcg_xTW`Svv$h3b1@ckc)2=91&45T&jxo|!uE$9mH%Y_YBd!Nv)8GBXDzyhDrBsTII zhIt2xF4Bp(!dHCvk+{5Tz4C(=btlrTy^FW`kdY-69v-q{GpwC|s!x19Z60JXoWIb@ zJ>npwZ})eX(05et);?r!`%(P)g$oAOpW*u9R>{tmHvzrT(E>C59f78iD6YKh>KH_M zUQfy?Uq9Q7F{Q5{z50sr_(u-iHwk%pOLJI3wqSwb+_a>mFA%xq5qcR}b&9Pb7!;@gd0HoMB+1W0Dp>5X~6cKFnYI~En*xpjXjW_3IPKS7!2Tm zNn}4VlbYL6T>=i#B0aK@NI>Rk7byxT+P4wyzV$m_l3C;~AZjXE`SnMuR#R*|t_(*k zcigYR+erEKovpT9h0l&kZ0C=^b#4JBcf}W}{3XUha<6niuLS?v2Z3N#P{d{X5K;x3 zjhNe3i>4udVs#MT&rYVkXXIE6Ujv%0s)|Kb&rPQuGI7{IUUthG!tavFmPuYkWq#$d z24ZO76%f29JII-}Y1QDbviw%>W8-d)Qiy%A(N(WJZedph=j{LDJO2#}X03K=?Zfg7 zA+jqWqg_H^@=G-Is1r-!<9X?iPJ7{(=6-YNWXHlc96G6-Iep)~t$NZx{8@w>-qLPM zz+(0VCsOVaU9dKN54!s5d?X}-UBXJ;V&nQdA1kn`tP891D<6w~i0M535^(6G#um-n zu-F2>H6uJr_fIltvlbg4cV1aSkiI1&=sC4{ghdN# zwGq(`>$J%$9S)_IIVT*SeP2P79T`#`3|!|hKG=!uGaOlyBOb4)`K4*oK#QW~mu>kW zd6Jy#W4$_lbRg$p~QME=xJvfGJA&`&WsD2lwNNH2DE7_5y@Xz+iJN; zt>?Dv_Jx%d(V0K$mBy7eQssLhBBm}FU#qdG)oVSI&rbLt1+27bpePj2y@i{MR z5__WIe$CokS5xh@nwmW{u$O(~X1w+rE$h4WP51DPg@+&}@=AM<7`RhMfxnqBcnvS7 z8%WT?0}iZrB|0U*cI~Bf$UFNyJ39iU16t@#19F72pQ^1dnR7mrvq`O7?eu9`D$MP9x*UR1G z;~yg+teC=K&9xcN`j*l>j&BG>uY@MS*??IvmWME22g>zo$+!_${xTX_4D7jwo5B9!RVmtEF&uFTt)ks(Lf`ts_`|0^uyw}gt zfhj=7-U&^eTheoh8w9dRS)I7ZZfDq=c>~+f8`u+TGc#fDq$K^1G&dk0MZY{7n6cbs zpy=E7aUGnZ0uaayPW$JI^%9aHVW-YwEXQ!20}s*17G(INyn^H~qVk)77FP z1~qaXqc;p#`8&|)dL$*QpNHRrjRpv0LB`xwkJ)Umw0iWG>5(3HxSXJ5Qs1uxvSy41 zAVVB)Mg2w~>pChfU)KAOt@KH0<>c)#@}I+zfb+uar=roBBfQn)BmToD?XRc}-9QyO zRPr+I+D9bXGPEl^YPhQw6DGatmA5Voi>G7&ya zYSA>HOls=2wG51y-xF?^97hO-TO)>w1wF#5yzEpCw(sXx2rFt)#~EmbG=s~ydC zUrEylcK?U7!pCnuxp3w}zRc}kqK)-tj;2smBOXyk&4^R!%>L)iSzd1b*`_u{_7&yw z4UR+;ATLhT`{m3u63Bgw&D1TnfxCW0UdHMGamiub@fekl@|4T|A9UK1g4$w{2hx|l z=U4h!`35h*nf>R39xn3W~>Z9AF|5xfY6^87Sb%f_#<^kMB!uj<^Q;d0Z@rZ1MD zh|?+T>k#PXuvH7Jm2~<1HJ2MV0$DWCJVgn_%D@(AKE$bJsC9%}GhhCpwVGa4IAUY= zi*a(c$J(dDNmHV{@53{K6-jiut(8bUnHbCA2m1Q@9WeV_RCR zt<;b-nwzjVT#>{Dex5x%94OP7)zS;8VSHPPo z0C=tBU#(!LV8{xf&yu6iCSz}#;=|~7vOKJ zl95U&_-2&M0-MU4NlQ(hCWV#7@Ujc6z@B&Jcl5STcpgsej#&`a?-_MWQt-ko| zUW-{C&h_y~V1R-Ep~m@K-_ovyW4i3VfZQ{B>j7u?j)Zn&`Z-+{yrU;Tr3?=9@|!X{QS{WQwZZ3BSw&K4TE+NNArWQS9R!Fc_uB`2Vz2D zSS{+ip^tJqOS!8Fj1M7sm}JR%X{EseEpA@PNyz+K$`iK#8@75hUwC!r-~Z_iN2MZ`r!zWVUYRw+5`* z*jf;L)9#N!50PjYGv<%1ITtAOxQ}>+$cT3-uhq-Q>Xgov1TFd&stVd(y33Ea+Un!^ z`9TVC?^$3DkrzHGNWB_eb@C>PV64L=oDRD6p$NgU8BxkZH05l89!pR5$sSW(%7EJQ z25aVra{V{?Ty>=h?lX_T3f-27;1#mBRU=K}y6E0v0e!p3%%0pa)KC z=9~?>9$EnpSw9XsfezzBl$F*ftx;g<5@@PjP2@i?&)reIU)%O;r_-KVzj^fJOnm}i z{*WgXEJWrnL=yH&^8#5)LZQr%PwmYFv9)y4o*DY6u~xvqbwJG-0YKwCQsZnRpJ*`w zJIueBa#jDvl$($+Eh`oMl_}@?F=KzTk=-1=gibmNWEW}B&b-{QYY**=k-aHrYX7S@ zTp`#gPRL%Y#IH;_@`mZsuk&})rLb>owwfl`EQJwcWP26z{AfVT2t zIXzBnvyl!LmmL(=ea>J}E=p`96>v5@MARYZM|d88A*MO#H}#xqpv&$!Q8O{a-t2Hd z$*%lE7|X^oWl5Ktx3L?@_`YfLjQtAnb6jB9#r;yv(5_40b$z2V z{wpgMEpe+AZ+tE6LStj0z>~Ebdt$?n$wEh*bx&4YOUH@D5xguoloI7Bd@(O{9*#%G zYvy1MywjM*==M; z?%$?Ko7d_n$QIEIXT1QyfcOyWNA~mQrCHNv@RbbIz&;cTEG>rd+1>3xYg_sin#G87nu3}Q zjX~mU8xL58rbtGt%z8yC&`N!Qc(`5sXV9lMUs5e4a<9It$D#n?T{&ZRz)LC3qwE}R zFKzq-HT;sp0UjNiW-+}9F;&u4&_DpEV$Oz30(Ck60 z1y+&Hum{mx02KH08cF>tD9-m$_*YO|#!$ArgzMyYAkm-<%Fo59ZpSO%N!^4i7ReXU zrN5eN&G>;Sa~^UT*HdL`VmgPruSrU&^4nJ;<_y2dwxmNkWEBt)?@+_l z6D3;+N`{723TbE=&iIl6ufp1!KwMkgZn3(Q`#*Y2{~)>0PClHJ`U#2UbZ3rO3pF(v zuw1em0(SnBM8!WnuRr8r0(St9R16?HC16@Nk5;ntD21JrH(b+4O0ha?J% z+sqt2OD{l4!~k5D>B z08zEq_d>Vk&d?7H?g_I_ii_Wu!heJpi#8QrH=PRkm06|@Fw1HHW*ODU&MnJz;tyt- zcCpjsPoErNC%G!#Zn9B*i&w<7RjwAN9WU~~5H(phOi1ht=67G>cLOy7j5B2P`N3Ai zclzM!Vwe1qJrQ%H&-+gsyI-C66!2K0A8wwcj76ij;Yhc?|7EH>TRdWJSyr&BJ+GH= z!L+(oLK4Qv1SCLCOFGkOsOlVj9gQ61FyXw2nO}^-lOO8PL1QKgoGH3xaXQY&$;o5l z;r?$U%l`H${NpKp-UGzZKkM&ZuAw?G#|TNdZm zKiUDNZ#t({ymT)%?`bF`G-cxR9=}h!9+hn8vhF?FN4VB`PYeW$Fr3=-K*|3VV&c;L zflg}n(LlBZ@*tUhn7NzN?J2?iD5vA3BE;?kj$zY`b&8_g&;Ow3{x7HSGWwBg`;3le z;N<4f_m6j07|S2_Eddrqd>7=+%9$NO(yPy7h#8hC?8U=_9ewEYVDVUj$j<{3(3uw~ zKzj+(-@sL+cfU}C$wqig&D-K{)SL`tKT{FY6jjxTZRgprC&Sh0FcI<|T631jN9~Zd z$HQMgWgf%N-=O5;kHTq%Uujh+^ru)5JnBK!Q%yKwRjwn%*YETh-%9zwm-ATmG-$(d zVLt;Hmt)LqL-!K98pTl5>hwxcjgZ%|2|i>qg)khr`l%*jZo1hIq?u&pTGt2|J_?Gp z3AZ-oC;bDp>R)}~We?riw0Q{d${92P`wiCSQLhz8oWe)m_o5Z1a|*>^-#+96z*|a? z0MqAR*n7-HUICvEj|`SAejTq67c@oM3%JMq3gJH>R9A{WtGLfL5#*;Eq;%oeJ+(BG z)J@6iA%&AY>|7jH3iH&E4L-~DpU{qNN`c@8v%i1v&d~f}S;>_-3+k)=4$bb+C(P~_ z+XWtRc7HA~*xMRQ$>0r+$LWHVwKgS^@LejGizo(O6JFz)*$Y1_GtDJ2`=o>M5^&Xk zxbWqs6uBBw!QtupSc+_hJ*<0MEzYI!A#_gxn*8~4`palg*KUl=4MO3zTD#nq zj2}cHm-=u{Yq4?=Q|UQii=)7nOF;?V4446ABan9IrXF@PHDNcpp|&T1knlrX)DGXA zJKCCoPKn(n{6UROF?6tBNYuCmN~bOA#z>rIM~z`#5mHwb5H8i`N+YQmYi-bVig{*+63LvCkx=d!}Fqk`?2GR8G z)-ywxlBW|ruaNiN!hMM3@;(R>@F8Tv{F|t=t*jb zn-y^wsNQuI{nxL{A9vFK>*4jB*{lNl@bYbgfwDgykl*U4GjI?y{MOn@=OQ=;gwRltcBu za$uF+Dv!VNh(H3%%f`D*XC|6$J=^iX^8|13h)gGiZp-r(tUogU!DRU_UohY#x@-lC zM(YWA8-c;B>p-1+JU(15g=S^=!2S!()C3^H_&dS+5~RR{ZliYjv%bi8Z?>owi1qe3 zK;HmH_+CXUZtqBsEc$>J{?HVjl0XQ<17H8ag2|yNED6Y;wLFPS-w{F1o{0tlrrwvj zfo>E`rx<)#F#MuX-Eqv980=ln<<3L;*#{0OZ%Slq6u_8oRzq##NXtK(@$p;t21V{W z70Z!kYCiQ;#{VPQ86?F4{in94ED!9C>cP65T@|N(-s#{Qzal#~ zcc$P|v^MZgCuz+!JAzN-UScMaUL!}54l-!&G4dldX-I&2vvIs5Jk6%QJb1>HMoH?u z=xzYcxSqaD=H}F=T7`ATR=o)~oj9aZL^d!7LQu6xpPJWwUm@JCc0GHfF126rV$qpH zx&i7pdqjrV=3up%pU5(2@BNCZF{6UfSvbz;Bx7Q2Q_B9Ys2ZpLMAgWwj73N70#yZn z8Z+^@y567DG-v1+(-2KDdDkVbWLwsglw}NrFnzfC_xHj7?UIw1Ipsgmb{c-;Mnu*8 zpWT}Y--9<^w4;HgufMSSpEzRDNrfipyzQx6z-@+d6HII*@ZuK?8rd+c`GjKx%G0keH>rWaT;5qr{MOz+IWr1{^g1Iwt(ferf z?Y^(J^YD24OW`JdQ@xFaGWxqX8{*!<*ml!vt|r2(l+p3SItxF4c@Jn`8lqo{uUm(J zJ($rWu{xgIwshR5I;0OnahZZg^HPhSvO{yud4!H)Ww*XHF_+i-ps%t+)d`&OeD^ZN zWfV`%kZA9d8%_lxBXyNyWps^0012`G_J~`ip?d+BdL*vQLe$8Pqm@&CUK(d82`GtU zo1z^60%Z#4H6~<(Fd{-XblcOacTmOk@NUe$x$X-D`!mYQ*O=H2xmuT>INx$f{^M%n zvMaD7*$53Kk)(cTdcWeRd)(MNEF1}eUnG6DzODDU?|zGv&1!=>-34*NI4nIj#|=x& z_<1Hy6*k=5fh&_J6v6tp2|tIE+{T)!lo|58oSN3!1T6%<9Q7FUjzDVy?Ed# zt9A*2_5v%P3+;G6tgP%MKwPM&_u$o@OV{hp+Db^ay0aW_oT33+fN_s`ApH*uQMrsn zX&jk0_L!(m;o<$wM1p`qrU_l1b4L_D<1~2^5!*UAjb-DP4p}eOH|fcW*i=~^)ttl(yv%ab1<=fHNt>B#77}_oI?}S- zzAm>VO&He<2-sM5TYqVpvN^T^DJz1hr1*i6RvvSAJ9L3pXDf7O>sZRZ+yDJlKR#7G6RtTTj?Ye(^dququgFt#jW zpX+d(il)jlaLpSoL%O=h^xy(+ zSN1KP-v7r{7w|lXc2MCx#30kz8EC(AH_H68)EnMAL3e>Tpi`!@t#E7GmQE1MFlF2v z1?ik9QUdziW&o(0lRA{w{rbJ4C@{O5ah@bV{(wOMhP7T=&98nnxC4nSBLW~DVVo~t zz8E6N9ntsgl-*&+&wqyb%URZ_WN7@&o(th)a?Jg~`I#tG zKLvm7%lm6#FeUpkACH?{HZXR7_CINoHtkqkscDFlKqnRyuvW@#!b#Rn*>RZTfzN_J z7j20mNQ(t}$T#_#32O$r`IsvylXg4paRSfinRrY!=ecG3d%N$sC#$F}R-f8u0SSn0 zKRC7Ql6R8Z*L(!Mj}t|kJxxD=sOi>gT3{s zAS=LDd{AS);)P6evo;_#iC~W#cuVkRigS(R&HPYJ+SP&L8wiEFpb-AY*w_wp2?6W> zSq9wgZMFJ?_;jZA+7bEP0Z(!B!- z;FLk;!1bxNS|cyEpDRoVlw?ItjYmCMo+Q{`V}oBk)vPl`R!Y!!1atwK`q+1FlkWa8 zS>9~_Ml)`AgE;hRg(f9Sr^E<|?Am)O*5z4=^|ElYl+;+mqd~eH2)?{r8|47&i{~)S zGoP~2n*~;D40up6o^`d%QH>lFuiNCH&Mn!h7(MfQ`=qzp z%ncTFfrajNlQYr-hl>C~#go>rLECaK|KgtdXM-N8P2vK58c#Rsvt3Ix{Kq3w5VIW> zmSJ^Bu`xUvbBYG6O@IdnxzerIe~@EXEfOP*Fb#b9IV1)abfTJKX#tZFuagFWxy^M% z49Z&Uo)W~iW4t~gBLkOxAs`^BydZiTjE$0n7y+WCjsfZBW-ZF4W$=?hzq(TwmKk*Uq9R9F%OKaO;Vu=XLbD`VR4j3sVnF;gS#HH460{gA`{VJ}>Spkxk z|C@=Jz#YJRt_XJ}x&q=9NKXE@Z4b`64}w?I{KOO6z!Z{}PTXU5UZS-qdPVzHul4tn?M4(0aotJ~(phh%lC_MvfiJ&|C(hPbP2r z&ldj+q5xUhfGEg+g(yrXz`sHi?!5~1$Vr5=MSEo=o~tP{yRzSGS^6EKz3`$X0K+FC~eFyjFnHP=9^A4pfpZ7&XL zR#*=9!Ojy=RqyeS(gY;7{G=NbU{2im<@0@vI_;-u~0l+B0zG4()t$)KPJR(_}IFC}sh_$5C4(?`E__0ZKW@6BSnd)_^a++M$A*!ii$L4f%NABcAdqmzCn+%p{vH)w=$NfW-*KG`>V_ z4X^J#9@8*9aRs}cDnu)D_PEA9m<<(pd**-hm}E|6Mr?Yd{~E{_6koQ#f|ci9`WZ7M zyPC73ju7iph`o>32?M_hf2}86GBx*;9MZmM3jRJ# z=%P16+5rVJIViZ>QAK5(e+jpKGbB8E(%5dsWbe~=hEd%82?xLH`ran$V#jfLurG*1i>=8FCu30lhM4Kx>TIM z`90oXv&{DWIijrYx`a`8cv927T^a#nOlJRvn}poJ8T`u{b(FT(s_=%<*h2q5c$hwB zhfZbkq_={k(=^~}P=Rzy&}ynxL|p!(==>*mdojqRj#zzfXJ*59v>ZJVO&Fs{qQOXB zG^G288Y^cHG+z&|ocjD63q+rbt0s0&nCzPC$WeLQ zL^P6ChFyAyM1CRi9WB0n+9J%h@}?CQ6gMIYs@Wk;RXHBq+v_W9(QQY&;d>yFA!T)jvYA06TOl75j?{0HcKJ+xW)LK_A_@X)^+2=B2Lc>$HCB zlFSRP&rQiwAZ>1Lj*XUVg5Yxz){c^?=7xlLbr1XvFIw9Msex!)`Af$!{%KYx`&)Z~ zx45n1ingnw{(x$x=KhCJs%1@eF^2-HDI3rSk}4EL;iK1rAbkFLavXFi#czd}w_u>L zMmn3~SwebSV`gb>7w~GpyWF>wGf@I)sG+^ld8%sH6m=%ccoAln1RhDBIs{@`@t@jw zl>2J%hrAV4Tq$|0q3C}whGC+P)cSQ!kw^ew%^oX%sNk2T`iQ+1S3*eEN4A450Y%ixzpYR1>?f z!Nj%=I)n;U1lx8#jNPRa=wyK?)73!9#-a}DZU0W?jQ-6>bxTe_|NACzi(Gd6b5M|} z8#QaMq^`33M=Fr?6_T?-hnPGZ#ataSuhAZ0=L}3N4)`s5&lXoD-P_eXM;bT?@Wv^G zgPvRxoob{MHr>J74qE-HPL`;NS?2cv*v0lYCl)diu3j>Kbj)bG@WTfh4nHajJv_Gk zr>y1^4-VZmymt4tq4?!ZazZE0wK-keXOj8x;qAobINS!NMvirj6GMlen;(X`O@chpQKw5LFD>1`Pkl9y&i$_efvtdvrQC0DCpZ~S!vTYUwqAj?2qGLn@veTj->A?sz1iWovAeJL z%`ev7L=Ph_|BcY?1x?CJ#y$7gJ*r!BtXq z&_5}>`4T(xcc|VZ<4;GBe-anS?uo9FT}==6DUy6#l`Y@j5Ur~T#*v)B5_Jg#RQO48 zOd(X?Zn?V_t$!?K_I0%G3fVX>efgYUw)A^7vs3CZZs>vtpKmycT)vtVxRHPUr zDWjt~(^Ptc&oKz_Ip%2qpMzjHK@JD_9MvlA?1%050Y1k$ADGWAr?ReOt6Q?CI`-eC zs+rF1@SWdm$M$)3Z9sSBN#;DZJV!sm^^z$YB_Zj{as$zU)Z$^=*oH(8 zILwS0H!>am0YqQco5DUV0JIB{gMzaF*=`&Kz_?mXU-MN6Iee9GNq;%BVr64dk}d12 z1KzRr%gV?Q6AkiWJ^EPot_&5J7pq;NwB(g(%?zwJ1(_anlSp_ma<0O2pu!;4w&tfY z+S6Pr8^N%>9tSthC3HqH^MLg&tTM1y`i;JV!0P6IuwJRH*>Q*dRSR|L$(h(~KSmTp zOUb1?vdVWJ+37g46CRDDme}@##+T48X<+r1}0>{L#vvjrzN@< z1H>K~@tHY8iu=iCCZ>#OqIT7IrikWUCFOJ`0k}-+ImSGH*Cm+EH=6X(=Rc0FTiRYR z)tY`uy9z3%l~aptJg-WxlbTXS27{e7Ce!^}-gUiNaeVT##G;})pQAI-S;kqM?0q~W zlBO%TB3|sE>O5h%KUI~#AZY#FLFuRbh2ujJz1q~t-l5C9)8Q9Fy07Ox25Y%ioxXVl zVb`ftQ$4*#eP!c)GKf#FF6^vNQ38V4E{3#a_RR2-3UwKElB$z!)Vzd=*3%YI2H}04 zv_Tw|*tKA0$TfcA>%yX@Ob=bzF0rN){;`fa(qo^Q#wwTenyHp9CCFGRAi1T*t>3jO z44?<>x6j)84Bm0M7trgW$6gLuns_{m@b~|U#|=lM+F!G#kGTxBOkHt*KP+*!XWMWM z&gD9b>lu^`Ur4j>dq2DqN@8SA+K@IM5_(os&03@OLx;M3`K1BU);-t5srUVeT1B(E z*Y$@Nyeo=KY7iH!SN4c1QGg>Vm$=UJL)=*cdDY~uw^n|!w9nD<;s&%>Eu6P28ww#- zxfI#0&KHL;oO_j;X#COhqmgv6mcmxyHO?B3rKF9?i$Eu|5_$H#4q`8v_oD2H+_$>6(x8%lut|-11_71)~ z^EpimS4^a(37Z|vt$%U?eK#f%%FNmt(R}n*0j;UYANtvq7|?)2UP++q5yjQ+b|urx zCx4aCrlx83vD}>W}FvzSgE9Y zjA9f9&zpF!sA_T6I2?Zk5_d1wNC&VXrfa+3xbYp9OhFj_*;8@oPPE7!qW!Hajv-UK z@(|%8BSN;}D_^Mjq7gpd$8_oP=!N75Cld97+w4d=0%8aTWb}yUUR3wUgchu5pacNuBV|Uxr2k zJ{eI3du@A{Fl?T7i;7yP?LvZI>jy~7wF;@hqIcz;52(i3ppJ@6VMQ7ygrY-DYOR4* zFV5$($z_$yKC|P3HSQIKZHu3ejW}TLD+ola3+kTCP7kui-R$?woYCUak;etA{0A7H zl*OkfdTKs!$))d4fU#>hKVsEde2bm;JJl9xi_#Os@P4t->bh+|?z0VJ2(}oUTqA}r z>9#KKR|zdRmgdcPTevVV(rrVY^Y0Nts3|eYr7eAEdz}ek;_xr^3_@vTxeZye&2wRm z8xqQ5-iIE;@>+tf`|LdK7?Gx#_^ zQ|?kt8H3t|l+S&;yx6eotm)sEc7Cs;*|?Bo@>DAo$|Ds3arOl}nh4(m`KqKx1+)U+ zy#`u$3FJfTm#3Iwt=bi4){3%7DmYAQFeC{W&6r19-Fi8%F>-pO5&l_Mb#Ie4cfk6! z1_=cbr5nP{_^b?8IFL=;ZOX?#LcWw%jWIag%Dk`u!;KK9;egB8J$DgR6r#=Z|q(l$Tg|pG$suSWw0oIi$<{3`-&=Bw$*SR9TSfT zf7nn{q{zJvZL>o6R)wJ$!{wJhji5d-)~*Y9z#nE639KfrE!azU$iLdtdwNu-XY-+j z@QZfCkad5wSmBS3iAa6?>dC;Zh(g7e;maS1N~e@Wo>VQo8@SaAyn+ua>#dB@&9I$| zTi_m8_XUdkgLRPq1sov#gqLhPzA)nH*5}j}-*juls>Ys~A!DjgQ^6%DbCuthePmGa zTSlzaY!O3*TmAQ;^4W-0V_&634}N9DWVEi*f;M}+ic}yDL>>-}yXOV;+P({8!F6Y- z!YAaf*sm7UUkLY2%G)n}ivw6)({ts_&9uM{U_wg&0Ix69Wgh^!Tgb9&- zDwU*0s4U5ZkR@xjVW=o3A;j1x*-2x`76uvn&S30e#xnN77=!WqIOlur@Av+l&biOI zf8D?T_yZ50xjxtRzTWTG>-AJYU6l{VAZFDPi`*DMSKWVSTI=sQR$o&akDE0#0WK3S zK*IY_DpGUtQL`@-i?*gTfn5%5939FerO2%}2#e+4E6C>#6x6`Z2BbhIqb`5_`luax zFRARJ5})ibMMzkcspb$#Ox2aTn-dhqAOs9cPMffwSQ*UdqRidQPWXZ%vt3e|-ETRc zn*z;^Mtg0ds?bJHMZFnjB4A6Zw3{jFQqJ;;$<}CDn|gA^`nm522EHZ29$wqJF_7pF zGG?y%Y!`9VP_nSbFxBbgU#kHL_Gj#riiWNWztqha*-YZ5vPL98id$dzz6{Q*FpJfT z5HwzERNdId?!EYm$cTvT!3y9K?Gs#42kZ0!&ymlnCpoMRAOb_W=8H?qD06HpH4YwQNxf$;5MF+vX?mxD3iUjw7542l!GOCqv!3r&6;?K{ ztav-u@}0fWYM0c9IyvNK``WuSRb~eg7D-B-N8(SSx5MyU-(J>%h{yvDj=U_GCBM2z zT@DX7JyQ){mM%B#No~(L9plZoG}_DZwe*mPg-tpoAqX=!1JBiP+qT{6D}p8&-@a?a zVr!NDx19<(@_WQ?#_3zM#nkNnw!&YbizEh_J`au;6Y^7f0nv2I<*cTH!raH&Q9#M5 zqD9fu1>txK4jda;7d; zH@z^jz4+7lrxYNh%oP#lJ3P^AV<`fLe+vwfS?|cuRL%9kth8v15Kdy^24d5swvx4Khi!Qo$J}-?3 z!cgg->dZ%q^8}b3%ZROn`*WcF$tUKIsmWiRhVMd43%!aZ@8TxR+aS8| zus2$VlLJC9Ba=Ss&KTpvK5a1aC+P5fcZ|)aibMgAe&4`%HrZdC))#U13*<$Y+M}RC zFSl(QUY3jo%yV^Y(Y+FC1v4$qv+n|fhi<%7X8Ep~HkjM%+&||Qp*M$kxDZTT4?*U9 z%x%08Ki7L<3un8WQ0>XIt6F{@y{>fek00@$Ds9CN?833g+s_Y5d$`NPSxCG`h~cIS zs3EbZwo@XjCV;AgBdkWjHOc)gy#bZoqCR;kJ>;#Lc)9#|nl~-I-(Un1wjad}d<5zN~CKi#4K+*jMDW_S@8bzSEYH%R;YGar*`0Ioze*vWjZ+ zF7cZE3R#&IM?G+A6gDq0PhGKgN6cGO++GXW9j(dS9;h z69=RGcPU5m|uI2~B|x8-vB1-nA4KASWqc0Y3( zSMd&QyZsO|G`va48@dNsaB3}Ip*nSXplQ^#s4sUtnj#@{L)sHPS1YT`^MGSD4aYDi z3)=VR-HfV)tF@rFf)&aaX1wi@)f49E?4p3uS;XQJ8C>DM$o>xERU6*evC95ZB5i~@ z&p}@G6zFWaq%eWBhd|sX!W9QrHZ0%qmYKJyZhQVx_k=%K9tuYba@a%)<|0?QLBEL8 zgf*#?%UA=JM+#J5&$&DI^zHgSfwqrrBF4i(rQQl#0c<|^d}Ye5mU$yo+`NzwkU3>o zohA{+{3esOvUQO0qWn*;J>OA1Jb!s4>YT~tHICQN9F}6_A#*nr@>HwqXfU~AR;uOW zzffcfeW*qqkgA^&!V77d zh-5DkN`A9tSX%rJBXZ6@jt5S)S8YpDUkH_P+&$h+s%4Hdn#$vaI>QM4*eK5n}x)68_@8g?q8r+UEGUqz`s) zC3~<^&IT2Z?O<(81Y>k}t~H2>YZO&-=w~cOBu%!r~AfYxAY( zLvqB28NLQ#d(XyjNLENZR<#=yKd*1PT!lD0Fc z7|tU?5xW-i;p=t^j5q9_%gPHGTBqwki><@Rx0gz<$n|(G?=8w;3| zq}uvY4QQ@(l1g4+=9FzG=R55nK@j9{^|`Jg=<2$C&?@2?&cF{4VXIJJG7K^=PST?ZsLPWgJ4 zE<_=2&`L_6}3QO~Q7M2{zYCDdO$KZ(Lzl^vt%+?``dv8R}7 z85_q9+9E%Q01e|Tk6oH`JELqotDDpRK)`E)Y9@T4OS6HsC}B-%f_~g^{dQ~wLB+YJ zzFyjSvU$C9OOyFT*X27GH|F|&qwOYm8{AK3TS?Fd*$hAWXCSU!WYOT^D z$Y{9ty9IkG@rD;ikvxT)J*`W1p4&#oU#dOt>#p~MRqxzG(0@Y8Ns8oKL`>ow*Hkx7 zfkB2n#%2+%v=C#KO~h8_5Oa0LHFUMdFv)8I@9X^Fv@djM4NVQ3Tbr+uM0HB`54kse z&KpPsohceYwnd#X&Rf!LVy%<=Bxb=&2zxYfV6a)CKT$y@VR?U^Z==g*1=gfTBJ z4F3XMUw}tGfI3`mBS?OUcbK?J-h_DPPkN49#7368A{NiSR#CqT+g?F8T4B~r+g3n8 z($V4JC)RFoV8hY`Qm=wbxAo-)%qxbKec7MM)2&T5@)cZ19yE!y5dm1{=H+kqAV}lB zg*p5AZr$&6hQD({{_1hjy!_B>t2|L>TWTH^4qnD;Ea(HaYidpt-bv8&rh$_g8U+R+ z)xg05Phs!#4xMzd25u6vvTkXgV4+lFohcfAT?2&!x7$)l0p;o%{y)NQq>eoHcy__p} znd`6W)Nh&&qyjpNFz7u=+2s!&2LKClT=QEdz3W230Dngp6znYAP?Nx%R+kL>LVC2% zw3f;pq9RLYeU{*zQKd1Y9G#UNt#7)xyrax*0|VaGfnoqP|2V;1eLI6;>coY$K4wo-n7Dq24X|x2Y%RkZ1B+(hejC<6h60|C{h5q9u#BE` zRj{~EpYe|@xVOEX&*I*9;gh((&q|q4Kds3%&~&j^lI2qYrIFkjBGfa3a#{l|NKE=L zkCWq?aKn~uFUe)P9DPY2839L?x;ph)Hkl#VGYbloDhLx8Ozk96!G|5|QOD9gvp)kT zxHu{-u#Zfw7kZOZ%@^W%KeNzlzOc|!jAyrjw#Dz$;hxxItq)^(`b#cep~` zW8zxKOuolITNH!zCG*bBy_Iv;LY^@3lw2&nQ;=N)kev;oQ1SXtVYA``x#Rd~#f)gO z*gOD=!-~0%_4Cha7O+2C?I+9VjSa+*ZmN)Le$N8X@%8816CX9$5gkG#i6tn}%8mo5 zNFc`F8c3X~(%RJDS`>+X9tC7o29@a|OxrfzhnzVhpPJ9Vr27_hgFksnpH)=sgbox; zI|%Pi816YKrvk*ZOFhT`6CR>xerLEMq4~`eKuvV1eiOAqp5~b*P(yL2Y|Khe1DCQpIxHWI<3ujSYdN$PPoWP*t=vDk#pFW$ecTTIX)QHbh$EGp!@ay9? zp6c`En%JJNlsBuxyaH|yqon~80Z23YyyIp2Q2X{aX)?NExtcl+L6&aL)08#_fg+s; zDAF%1*lL>XTKw{*OwI+9#6WCLeb8m!cJF@gwKSj?p$1b;v-I8>Or(LNe5RLm;dBcH z=Epz;?p6X$Tfw#Bf#=#ih0i_o%h^Z!$g8pFBAjF3{1;Il)$LGVl3BcSA@CZ{#8}Kq zwS{x^mn+XS91ouEI{jw`xjz=@Jb@Rt$`5%vn{~Dy0a&Dksz!a5ro4e{qpkBgu-U#- z)x(k!qnfsNJyj`GSrtFNzc$VF{9V&r)sAVd?%kd@(_WSJe=yA%{iSJ+_+O^EegEAw zM`(!Vrw8n0laU>C&}Gf|csAjM=Fnp@sh^>5TE~69Bd(&O#TKhU%p9*dYEzR?DbQr4 z<@g67dfA~{(@q^VylZ{E_wCE6qa4WeHd>K!TveUa{VJDG&b}KPt zmFzVWH{M8Xf=%Zyt=6IEaEf#wQoEVtwF|$Al!c`W&{XbaiNE*@}l2B*f5p6?g2PT>Va+dh1hMBFWPFu|$dB zKa?rnn3z9~ALF0VAojVKhC)iUh$kCF

    JFm=~PM&D91~fvT=aZfN6$pD4Rh9Kz82 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�^y`FofwxlYy0} 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�D_tIO`I(0X_xme9j%gh5r&hmX@UUfw8WE~Aev{1b_PSB}+5}zq zCVw&C<8uK{rNW+&BhH(?K;T1d#oz7B$c{_@E7<(#zAzwv0~xxbZ~VKY_cd*YZ*uA|k|lkhSK2w?UD|IIHb zSHa`&nY*%kJ!T1;5nQwa>u*b#kd#u9Q-y6`bu@BV%o@#>BAG~7l$@qt=aI7De@Q#v z>L|;n8SP^b&fHQL_+mFXch7eEaFK5;zy9E=to*7h->b3sVjRBUe-H#%>;Er_yX&{07@E{-F|R>(gT2D8`y1sZE6IiDBg6HHp9_H; zs?q4$VjoLAo|8-`>GuvRz$R{Wq0w?b|@GrK($`TH#$4cDEth;IxmM8oOq_`%u#)E|a-f({U2dE6|jkPYl2h_>Y3 zxvuwNc;$?g?(Su8sP;E~v9vhByWO`XXkRXFh7)+&R*|^&IuqHr@a~staVR zxuq9SX;}NY2yLi-w8G8+ofV4UkKosuS3e@>ee>DCDL-&E%zar&!E_;jRyT%}A6MxE z0SykzQ@q%q|Hv1N%F6QLdW!vR1VM#2$XnDB6YYh56QlE9sxKEL@IMPBdDZ#Sg85h= zg8w}UJQ~^*dG7Ys!(x>p9U8DgEv<&^W#yAo<6fFneUuO%U_mXinwG)JnJ;cc?NCS))j<7!Lhyn(L)3N1;H)^dX%8T_1T)= zpG!e4+RlkTSoe!(7sWrC4)J&|!Ac=z(T9pLNVZKCeD+vTvL%*TmS{!i7t9M2Fn0fq ziQg={sjKqSk&1AqFNf>KF&+ZX7;+7oiW3InsU%E94(8E_5?ZHXEp-J9svPUsm^WKE zMFa2Cc=dEg;bYBkRFUgyxeX`=zF@gc8AAgKT4x-G@g?!_6x5=HzGbgYTYY9@wBhpi zxUH9j-Jfo&?>ry+F%mA;`#yn)_NBchaLPSUbRqemmfwp=^fwt?C&L; z`MvOEfcFu2Gv9h9g%mXa6OnFH+~_=CuT`Yb#R$LGhe*sV4;wTas-tT}6cBt%C0caO z6N9kIZ#2463Qiwy`JP}Z#ITk`JRhFy z(Glq?jjpiP2QpJkp()`>kOa2~A|`hd^N zhZN~zm7!@G?gzFk#B#&gHH>hoUMb|KvxBLwI3pYNr5FF<$MgdMwwj6mIPvX6 z#hV}UKZk4MxGm2vT04Zs;yVj8bDCA||HN`K(*CM?O}{ z4HS#cT1xYZyfm5xu9?3HVZi#nrL}s@;%5_@dI(zo>X|#m9sd)!q;RFQUfkKy#B!mA zcZEDAlbl-JiKPoYY#?ASTrHya<>s3ACrKRA^Ex{w6G_k60TFh6h^fNW7erJk{j}y{ zA@HIGD0aCM`9$2{bPn%ofivRVtPrpX2!rD_S-N0n=A4GGxB z5FI*CDmD*!-lqgHU3VT+4LAQM-*5ltZMh)(w5+t4cdA1kG|&HNKb!I0N5ha8_)IF7 z>ju`&Mg3_|9=`!^w`_Y#n1G^-6}S0|_Fjbq^LQLMCppO42vg5Hx0Z267D_}L1{JwK zWrv&{GCYZ$aQZdCXF3;F7X1Kj66U*|g|cRtxL>0kaMUvnj%v^e=^juTD?6VH!4xt&u(fzwrD6i}+cu{i>cVN&Q>t_Jhl35T4sN!b1b z4Xys6e1tu3@^NHT4tlv*w80qixzA)!h0e+`4%h?a^iV#VeaQD*5kyDkJpXuM5p4V) zstf;EWrAfW=*tJRKS$`|xFH|aezXgT=?&)(Z!eV6x#5^{R$yiQjzg*?PwK&#$-4aEJD;^AVghrNi*xK? z>vkYYiLa>^O|hA}4CiNSSmpsj#$NV7DH5?v_FVKGo67v%VzU+PfXZOeNpg~WMLuRo zr4@ff=W42MS5L2nlhsK0qR;u+3>=b4q9nW=_}53b;Du)qfI*>`)cEwbGBBYKZWg83 z^``eT@Ib(Gaxc)ZElJ??V@;+G>J>GdySf9d+K46TxW2SK-zd)0@#)>#m0JXYAh>*f zdKvlx8Ya#!fUB-?n)$O#^p$AW4JN4FE!Wa-spl^N`J7mVXeh& z;!%6ulb_1t*^>lqBZ5@k@UKkuRXErn4<(|9ewQ{u8CE>;qNbBb@_X`{1LrDQUahWU zU9wnok`z`ThG=yAA`~&8gvt7{e8)i(U!!Y<;%vPkd>x2Z4mV0)E==#l9wgBtkLp;i zYi335*E3kCX`u~uaV{)POSRq#&{@HV68#F@U)lVY--RV#h3U2RQkz!90)i=*L*2(Zc2={=ChgbFzvrCq0px5HzTz)g@mw{Hb_#>2RG zxSv29m!fUgpCG*+&81JSg^fvHBaVH8x7?@40=qi)kb7I6vDdZ{9GKZ_KFH&}_J4`} zfaE-XA&s8(m)y=9i1 zffr@>mFdDT&Jmh?{Pytz2p$t`!*5t#n%MSl+lisaZE=lLGCxI?Cn2tXx4d&yaHh15?+xexurybef(|=>~p%CjKX~2~Y3fB&PX#jK5B& zAzKpa59fadwc>+CTpO$SAuATmc?nQEEFiz1?zoV*85Hz+QaD@Eu_g zQgOS}E{`xsPeuyxg}Q}c*8tJEDbw$pD*;|^?zW*5g|v7(aiNRnseFMLa|`{o4WA## zQ}l;W5(8p2zRnkOLVanY;Ec%xWO*loe>B3>rL$2IVE3RhOK#s`LPYga^Fc5JupvOd zI6YK3*$o(Fpa8!{&eN;QJrrO7&Z9?daV8JpjN$HZGZt;qEOY7xt_=!^l;=7PyZ%*( zx-+LpZQc-FJ1%!8b>n?j)y{oMhrc+JzqbxgRb_&12T?H4Lap%dK4@5l{=y3+#AV={ z9*?-881oipUyIUOM}G_#C=xU2eQF^x8Bu1*0zuoFit6+{&7B?L60vr!&7Zz+8)^X^ zskJOdM!QfNiZ2O9Jfy;M?~seHZe1wk(!rg+we4Fn(+U{MU8^u`i}2ZLq+LAi z&ZQJ$Hj=cumlM{1OPa8YDiBnB&R~7MzAhgmzyA5vBn`a?0gvaBR#Xp+D{EZ@`&)&h zYpEbK1$MVZXQZB(6jbrz!LO2#Uch#^C1UYw)YIa)Fg$(c*EW__4Ak^1!t{4}Vr$PE&L*Bo zb*(=d%Mb=9qD!9Y>wUdM(3z;|!F1Uq=BC z{u@oK_4dG73KWz*by$>XoO(_L=6 zo?seiOdBXio&XOu|0}J#eb&Dq%GE&C@%R+Q?!7W}hp_$DhF4|@ z4M(dG!QutIn@sbykA2lb7f^D_vDD@^NiMp7h_hmA^PcS+CPY+#V5IIxRl7mhp@GOZ z+P}X|{t++!L+?W~LhwOk$#qx0IP;m=3*b_uM-lB(P2E?+4`Ru zd=pwL`r|L{0tfTGxNcc1cn&d19Bq>eq$ImHC0L4iVz;VE^87YShfQ4tp8pj>`_LZx zAp?2J6WG30&pQ_6k_yBdg4!zc$Aj zW-YIpd5^p&^8pncL1x3zi}yhVcZ-7Zg%v@Np0}xMC{fv^FpgWa_;#{at=_5l*|>ap z_TB^B#UBTui3!qIFEfGCH}qmk8^HlYoh6RG4Gikt8@gVNIp6x10K#jiWmMJ4Y zO#(9JU6bB5z|0*M=x6wmv1WT?pf%6j;ho^0USt}e=?i`|t!xPArD z@2k1_9rb*Vrwz*?axD*bA%84JxTwFq?6HhU1<;oo)BOE^dABkOz>BWyuD90g&mu{| zAWQ*e6*-ozaX&3Xe!Tu8exahm0=avX7+#>lifFG*tWDsV&e<}Hbg#9hK<}kaY(^P& zTl^9c@8YQ_-}0PlcA)+s{M;&MKR z)AbZ33>Y9+S7L~)@w&IQ7zjlY_XcFuMmmTqO|N>2nHiZ)QI?t~%twQoP6p7UqXTVc zL{W?jrJAQ*mzd=zg06ib9I!q2KRjChFbe$89{j;;#@sN#;}fBjj+QDeBi|-N%k`C% z2Qk|#!l2L%`w*;$Az+IRLl`*^+XQ6u|osc)10)jbVJj z$Oh_S*Gj;dD|G@~owD5~RrD*=8Sf`95>FBZ6DcKBMe62&LG5CG`_ivuI<3xPg+`5t zqg4YS&T_YqK+M(pKv?ihfAl|jbenkXIIXCa$X7vV(~_tuh&aWI)>?iKgl3< z?%-SXZ@V`V0xR_NPOXVL&Yn<5hQR=^Vw^2yn?-w64LvHjc!Rh$V_cO)|L+SdBM2;rNL(^W?$woYlc`5-FaV{$4y9U~h zJ~1kh$n6wekp`1?D=yw96MQ84)0R$vsPUQA=Z+Jhwm2`V>g-t#k){z2pBL?zw=g5f z)tT)zjR8Uc)pP4(SLHxWrM9{i%#Fv$nyQj@z2U>U!O3^aouH!zbSk__k-ZZ=X(eAS zmUJjL{XFi?+S{6EC>UQLJ^x0Ev^r;ANA(dY#=ZjEGyXlpnuX+W{lR*zZE`i1#)-H3 zW)9ja^x>*8d0zs=A_PQ0IR2MlcQ6i=`bp%M$FR~XB8vj#LrzylT{4`+?n=qC#ZVLw zpQiN(cHEg(5Kjf{!BPXE2MQP;y@pJu-PU0`?HsqV5@*jjRC>DSs8sXqdh{C9uxZ{Z z#)ZlEAcHzF>F-U_F-~ACk{K;|IU;1+_j1Cw3$w~4AAzC8eJmg{W6hO!NJeAbtCB@<*lBrJJ7dYtFJ3g(i3U3w3`-G|jqlj^8Cj ze2k8M6spL!Dmiem4@3vFO9G~+w&5>pb3LQd*ONFhL87(&mw<@e&I_q+`C=5{9;)6N zpjm}dM(uWAU!j%Eiaq~K+Q%{hZhdWALTrrad?=&h-7q(()<^(KSdwz4N4jv6=CpNg z>CO64n-!5(-(|$s?bo+1`a4$uoX6X~-R6{vi|$v^h+Gi^ngrxt+r@5bSvTGXLUJ~W zG8qjaXQNE%s$c-#tx!C_pmTKtbkb{WKTm&%3umrC{ZFM%Q^b}KPG0cUt4qMWAq~h$ zDEw5#H^#05C1=fGU!MCY40ZfkBIvO)z{a)F9^EK?uRq1nMb9J4F4xxt%5u)o*@%BC z6DgIgyM1R(x7^xi!!|wDb4;T8_BU$Wx4D^oef43S{*o{glzr#q_2`qzz1Fjiqu+|u z&*z=4C1~Mny>^L#VPB?#?OexxY(M6>c)IUqR+w1up`}?h^q0B+&Sw3h41h(>jh<-l z{^=q9NE42IOQzS}s6;)N@`giQr;!r$S|e*_Rbr#BsF%cUx*UFyaP2?6K0l9_+$`}} zhFm=<{g`_ZAcVH~$(PWd>#o$gxh7q$mv?s74@5ugW)w?oy0%}QOiR%%eA$V>Vo+Chmvqy6_kqb%?fATxPQL;U*Wp zIG&Vi_F}bIFM8YG`-?eeGJSAoe=LX3FQiYZ z&llluCCay(uTgx{FZszpKHu4cM+pDR3&3}6^MQY4v>q6-4Y_^@SbFjJ^g{PT>hW;L z7o@S4req|kDvW35fMV;#A&R6Jel?lSIr$+IaN~HDO@qt0)wVLJ#wEuTmdc%I;Qig9 zIIV}2K;(~c*zuD02|!K1T!#&xip&-HWlD_67Klq(Q~`#TwDoP9$*xoT#*dWm8k>-U znBZn^zh9+pyjJ5iKG|m8wt*k})*@mUlhHoB12X*(pX~Qrvbm6I?Y6q z0k1EOGgJe5WG7yk@6vhyq*j>XM!2oMLmR?Tu)Qm;#M&-QoNEdn@*w6~-}|^}-mx4v zllXVGG50{Wm)J$N=TNGlxqhiMW>Cw!+=k^x$F;b$Fs%GomV0N|*X>8%l^)=XRm1s} za#eSD%x(Ms8h%Ep?X{h0m*yXWmv)ovOLO;eB|5G;P^w&F6L=NLR-B=# z1N2d165oUauxB17^DM4$hY#{-D*$b&H-{Qequ#KvtSAP<7og4Cv0mWPCAxSTCp^P_ zvEA;9`o)2>-!P?BJ;0I}f|in4mI5@|Da!>`*ZlSIB91VX)h4H8-JQfia%Mhf|Ttu z-w?{<08fLf4)bz7R9i*Lwx9jRG>lpJQ=Zi4%!5zecBQ~abux_eoMr5C+1m*+3etPn zL)z(jkGo}uE|jP41fH)E*UQ;g-yV0Dmb&ch`tQz(vRwd%t+x5Es5V7N7|g2mX1??@ zu7DS?yFB+M;#SL5IPHCX{U}1EtUjbIApEV+nFo}XsFvjfS4mikPp8++j{C2#*`w@z z5ex{o%*O=Aug#eshfQd%EZ!ig7(mv&iXB=b8XZP-3X$}g9hy8AhqAjdc;?7Pr`lvs zr$7B{jwIBe;SGg20X?tKfeb{QX#GuJANO^UivN8%ft8Tv*CXvY>f-Z<$l`D zyr_(zns%3LK7vz*-D0nev9(I?{@k-SGi#Aim~4M|Ha<|4u5C*p@KwfF5YMBDxe6FO zWBtv_S>W@=X}{Uy_lt)&^Y}_QgcHecU3hYoZHu?(-!d4Q! z=h0k>e8BoZC<(25e>~)|izxMS)`4xoUrv9M$#Ikk`+fACL!P)gwQT0f-a$8ZCF>#fkbr%lM7xj^ts*2HY0`a$;wvvb z$Ar{Pi%oGGd?Whm9-)jERXTlKoqdO|!_8~KKHD@>u4h9}G_YlX6~n-3-f7N^U~~~- zG5h-bp4N5%YPrr+Phb3CCHcn!$;rh;!kgD{Mkji*qF6wl)j22Vzb^g&gpLgk`>x42 z>At6g#^4I<)pJ$q{TY=tzi{>GC>0+-GLz?Q1~aO-=anWOqU-S|@APaN;Hn%gYfn2? zGg39Su{Zid4|?hQYc=UA)|MGY8|SEl^=5ZlON|mc(}|aaKOxPFbRrGFRc}&zsA&G1_TcNoW}qb9w&DMMocbLAhxU$d!;k31kN;`0vzl%LMora7FI zChs*Sl3s&PzZ;CXK!s#I*1E=O9Ut^KC}n)bghB9Rc6-T`H@xKPRyTK;ez(hrWSKf$44a2;+$S`j$osx=%QM#b2H4^|B1Zozcg+rh1o750ITyXd!ys zr$S58HqDKIv0)N=sR|;WSkRr<{GHz4$|=A~dTrIN^V@tC>U+!E^6$^MBnD<8`s~;S z#bgt|GUWMAY*M z_HR^uhQ)`0S^}K+Qx@5o5)T*IJMYnoi=4Y<)D)6fM!7dli2jIPkN9=Q3)xPINi!O$ z7bu>MwT*}uW*UmBbY3YJ@KipT0u-R-SYsH%gH$a<6U&QAkK0BY9jp|4k!oE8YkYHx z7v`W6?=AkNky4Z;Nc2dn{Oyr(ib9mVFig&y3SzP?oJSohWxWcyiEM1)LOYwC*lVT7~k2cXAJsu4 zq6bTRb;G=-t1+C+$LT#;o!P{#R#}Whk>iTo7S6>U zvL~O0r{M|F#xckh78Htc^B|;SAgyB^X`<(FPh2lh=X_6XvEl}rc6y{__T**a{MFuO zd3iK%qJDf_G*6jPDtsj3DY};rk^gD+T}g@0Ay2bj*sUe{fc1Rau99012LrrDN>W&K zWRaRz4Zx2RuJ{=`J|N)0o;jPmBT6Do)djRwUWzYPs_yO@8kSxRBB?{$ zNt-ej+Uk5L(ca_5sWCB{kw!}G!svW$mJ#8xH-gh>vJJsL9=(N~OY;?mZRO;8jLHG$ zx_O*HjwlzkLT`I43oF-Xe`_J<_uI0&3cJ`JzlOSGbCaJ`Za8TVqHnls=wLRncX;g+ z$sfnx_O2|m8HDfj>>75ZQ6~G3!IsQ|j}8<1A$v`(+2neK<-;nnC!OM>9E7Jdk(Jx* zvsWTjv{KSF8z~^=-r64_ABMbmKJlHJbG}i1hW&tle>&UbC;LD%)?--z)VWL)3K@H( zlJn$MZdn1?Nr97vy(r&z`Ar~tkbM{KmDpGN>nsV@wRr!!8n6{_Wj zmuLG!F#8e1@Q|~NJ-e-2t&w(e=7P1a#5fTFf&&8bOBgr6BSL?s4G|xCL3uGA^;PBZ z88-u^RyxTiku|A)icie__dR|9>xL(<=m~J2b|sLeIK??d*)9B9GAWp3T_f)a$n`Rl z)&s3vRaz^(tHI8j2#&6eDfY_X=^O={r)u2ubT%;dMMZ;qgfcu8+%wjoW0z1hWZawO z@5Y>*;|FwuVMerOJa!C*;-0>vjh7>jGi?7pj&#E=?m+x^pbV| zb*2bCN^*?kjZ%$I?(fRzr`bvq5%OTl#`oB4e^yQ+osHw(m)=<6Bq6c2x+e#2Z5!{) z^)L)m+d?0UB&oI!`wJ%7*SJJC81P2zZYBu?h7WC3pW=srGThgP|AvFSR(&hmtMfcD zk`2i7?9Xeaxz>rtXW6(Ib2(d^QQOtCq#$oxV~WX#xF4wtTmy?NR1#?rqv8A#fU%nw z#p|tuh>f}4Mp&a2=gZTGlv!<^f1|H_Nlm(VvFS)FPJz1^Zmt$wh^L|nthLTG*TJj5 zwjG(c9q4{WJN0I7|9&h`_2X4pbV4qMsn!-vE=GwjbwHDRM_clIy=cZHviR7}wD(hj zFJ2D1-ois5BDZ#RFo8eMv%or*VekYEt42N{?zJYS7eHtCi7_-uDMb0Jf29EOGWyYv z23fz~lgUqz`n1H#ZQ;s17+$-SSiI1m$8*tFgF}bJllCA_n2(Jr#vVoC48}u4a+G~y z>v=@bGr??4FQW5n(KE}xW5BeutEud5Kfi@mE|qDGw(%`bvByHBnHO-&EbyXh{~8M2 z#Ni~5irjCUHsI2GB*#XL1NOj6%{C$A!yKXm%s2UzbRFVv%V6H^T^8OR*a^g_p>A6) zMwVEmqUwhE_|~%hUF1_w;i?wg&_~!KkHA2Jpw>EKK351;QTv=-mIg-|)zUq@M+%hR z*X0#33(vA9D#JEo%U-k7v$88Ec;4htsZ&X0Z&+2Ao06ogu|RCRt5Y|$W#2fA**>N| zFQxI)OT3!|_(V1`hYx5yXWQ6k#?IO0&N=ngZ_Cs17YHVo-QzsT)V5r;GqfnROwIFB z=Iz|B!?jeZLs6OP@x69ZS9{l@#@pGD|6Lf(O})aj^6rE6vc}`*Bhy^pWsJn@oUU#0 ze#fgC8H-vlgHftc0jJmQ3=8;B5LUo@BITP}$r>x4fVZ?%)^l z?*zJ@ynZ5eyw7ME&A-5b^WQ{|G{edlsbwRP+X%|;EiyX) zyw3^^^FN&kwxk-J%UQZ&bx?XAj_3Wt?1wTJZZURRuH_y*D{oFc-Ckj#m019r`%jr$ z%YMdxk}t#=DM7~715Sz8O&T`BWWkVAwki~NCfHPZw=VQ%OyFHC5?i$U=I%pk~zJ((JaMuh1AyxX+vNX0N(OhuPiOvzuGXtu}wP z)A{>ebU#-%Xs=-TqQjC!se|F-k+{f9J?6dxMPW& z`FbkcmxeqvPO>3d5fX@(bDqk4Wof}2xWoa(fHbi>v41D!QI#kV=sFTM7?x|$ovoqi zBU{}Pi7upRSecUTO|SLVdHOb)1gTKFAq2c<>hHz{FA4O&r)hBZwYbo0w#-Ia8zq6? zP5DtI`>qaX4J&QWJ6d!J{AAR;JzOgb%1-0^)=Kl&7>kYopfCud!T|Gp9a+u`m5vNP zbpHx7=%gu6Z~phqtF{&D!mK38nlb%&#-~q^>}qU|vUpN+uzwOpk4GR-l;Yl^L#gerImp;q03Q7oCq z>rMXo5Vas>!;zVB7)0ZxbDOVEUdH)>?tPq^ z?*7i{E44sFJ@kC>7LD#t0-g6^o_;yU-^vF}%;4a~&DSb!ULifl+8SHyylC)r1LM8N z?GZ8q`KpwY)E=rx9^ZMF?wa8lL4D?aAT}<+QQ2(RY>K%&2duDS{4Dcb5*v9k)1Yk1 zxr`pF{7x#d&ldBp1~2Z@%k!^q1W9dPm83N<6HC~a(dNHdM#`Dx2`TnAwLQTce_#}6 zKE6;7IH_puyMJ>@*PK{-DRR?KQA@E!zJQtjdD_KpclS0aB?oEEEAE^J)>_lbk+xrK zvVfV8mI6wyNORHoS>BlOYLTnF#Ul1YwM(Xy~-8+&V&3-QR@ z>R%Bl-OXdIt;|BRJp7I+X0$s#%bs{^x|f()e*4M6HLr3{AcItmvIxGLb&kj+@@hCPZpxSIU(+AdRS5Q_*!Q^Z(u>^1WrQ<- znhFV1;3}X)wiw11Z*B@bBd=ByIdhbUK_JS3M+dSQ@{yT}=X9n4XnjOqG#{;%O0n;m z$xvZycEqvDqXa(Mu61zVoJfDaQrD~%JH5a_gr)$cT5V=>g2}2!z+8A+`{KAJLC6Y7 zO!Ufx)i2V4+bCef=_9ausxXwC6Da0sOMMzjtj&PoV86oR31SqtS&9)GPG+uA`PjNb z#X24*#@tB%kwJjdg{`<@Nvy5j*E3LiZ&>rvIfCbW8;0n!h6nC6lFBcoCv%ZKefSrP zN1(4t0s5+W&*|YUzbNef%a1vZ{;#nfd)fy&yYoPDcWIQ1E3hE)SpOa2Ls3kQ`?NfL zRj4%H2J>#G9}?K%oF2*Kg)3t*-vb7DQWh^*R4oMb(+^8u9V9T=B&x5Nc+c4m8))Yg z-;?F7#tf9Kzxdnkq2#W@yLJSk{`s!mWm#~LcA0)wYZfN19 zFRai0b6r%17Xes--q)`fP2hZ8CaFRRirP&BN^HCZFl7{UQ1#wLTj2?ZJdO zlNV)=DcpSb>@^piFbj_Gp+oW3^X~nf9TNkry864Jxq=wpveG*5#2*R+_JE0fcybnK zb{8?2s>{!U6AHoU*;8SQl@s&ZC5o2JTwqaTCuJ^&F^ zRan+YUxHJCD%!|5ohs~jAFx236Z0AG`dK|gJ=^i~PUtVEEPW#V4p-!w#Ae#^ zau=MPP*CL^w5)>Z3qfH{wpOYq_OlO6Z-ru_Qd1_~y#3@AwM9vp(q`B3jw`Yp@pz|S zh7`npS{rmmxB(8jmhU7R1qY>D$$xTa{U>K6Ekv!KWYm3 zkWDy}ecuV^CYXof_(FJ0Pm;T>##Q&zm8-o94e1)clb{Nx-y02S(JA{5Rns(>G@Do@ z<_QGMGJdxDoF}?Yy6T~cogHT?R;PLF;@7n}qvo?$a#{UX<6|}=Tc#s`4KC$ zqFgrE_*#AUguRA4xFuZDuA55<{PUW;V%z*J%E(;l~NT{UP=a>2zRb)c5B2>g6FS7H!YnQs#uRSf5k38Q) zxCJ3)Ex}f1EgSC078(V5X-9W~3>}DEaV(2XAX%Dgl$DWZOqL;YdXV@t5s_y(KUlwZ zUDef=J+JRjM~RbYlqr+8hxtPzzn3#G?NuP$^;#N;b!n9nVg2R#2=01#ej%5_JSqbQ z%{^8w&RqQ5d9vkHWlU<%bWTcUI3 znTI|X?jq)(HFONDT<;_eNiYbT91^=4#4~{6HHu~@@DH_KO`?Ec0G9yGb2?Rt;-nf2J<3T zv#sNSa39#(M%tx1>(yv;xB2WX)t1L*{yUAR$zeWMNjN1f8j|W=oaG{3`lbnNUVV-k z8y*Whh;cc+ADa$$X{}QO2mK}D{5uEcy&m5C+oPnf`rk8%A05x)TZ{*d;bAmznMi^Y zZ&ed&CZEqvj)}Ovq2VHi9yy@+EGT%IoX<$_m}0oXSFOrS=~gM_MfS_~4b?PPYjhXZ z4L)V~qMroOI)5xm)zd5g({#9OTY2}_ zxS#Ms!MR|3`mf6fAngp*2HWPKhp4Is#b|eyB6Px?D={t|%+*q$yhW)(JEqp}=wTfW%c_0X>WSzfb{?6FgMr2#TmZ{C|HHNNy^Yz4M;ES0AnO44|^u|>BgFtfB_ z-S5qExVAag*-Q7>#Y_=*Skxd z4)%vHX$;&QP%wsG1I^V9mY%2NGk2tc9b=qlE}fR&(!`k4B;5%asxl!}_uPdi*bjh~ z#q{Y?ZEY5VMzP-6U43VDEM!N~EKgIkYK5sl>%htrkF|}dcKR^iFaTlFs~unkHmp@_ zVhR5yM>m%QN1{md6(xJ(iI|A52*i(3F%0zH>opT?_v)c@RMX%-b5YqZu?KOS zwsjF8H{+i6s`8N3qlQ1>K>ESlTkE>d37J87k2w8o|Ay**C<;sH%Uf5GPmaeuUNDN^ zE+dnVHTRi&ce_0htfC)vTW2FgR&!h7&-1mT708KCk8qGG2~^8F{kKTxv{G^N{C8W?mtP)NuPVje*DqOR9o&+i z$@^0MWiKhd9+C$E+4`_- zc{(a65&ft6&QCo`1q}!V*~xOXvT?@dxGhCZzvx687oUE|8awKcfiMg97xX^d*LMqq zbgGSvINGmpW{`cc4)e`VJY7SI8fRfp9i?8WgU1If;B*UbW0ZgxK~VCtQO6HFnGf4r zKtHi41~a-(uYYxXeuC*i~Y>s;>Kbm%d0MST<=JSGi?m7HL258Bo|S- zzBN%sT=d%20RN2Q+k@ANqa>fCrBx?Op8$!bXSMkIGElOaPYFxn{~nkP%6^3Ci8L&n z6BQv%Wc*(HQ7eS@9nmP6$jEQiJh5}<^#@)#tM3eBIwQk+mPt;MEMKay2>`^u@`zEO9gl8QCYSsvQg&@-tyXmB_y6E-y}kYHcz5wKk|6HavE z`-?)lS*&a6S)K#)EsSSJwiq26qdMHbn>O+c)d7tdF5 zrmyzb(oZfxbVEhyseF2+Ck11O<^2WW*3@C8a|~2uK(( zKw^M&Gm!35fk}sek`jXvBP2yZx?|Kv{vOV~C+_!kJ?Gr}y1zetiTd(+o=?96r&wOB z4i7QYKR#Npa?qKRa~k>>fp{g5EBBG0u9Nf*(!t4&__zLk(q( z$#)!0bef1S^e=$Wq$f8i{FKQ1sS6n9@COH;XQi#+8tv&$AW6rGznsW*DzYX$Ogh45 zaKoojYwq18CCT+txnzKnxcZqd8KT8QV&OJ#Xrs$D_EO!p3F@LrOS{ad*;qYh9f_5% zk1=^tWBT=c89d#j>&|BENu6mvQ~2fH;vdvIpqT zvVw{Sa;~=38bCntqB~?=*K~x>y^b8x7g$lM`fgpmw)f+Hhh2I!75kW})6$14q)?%i z{r5l<>OSf5DJY53@-dmMQ>HxW`i`k2FiYqN1i; z-Fpu+GHnS|Iv1Kcz3$*)yVbz90H^t?ZcEY7KHY`PwzlR|j-{N|it_=`ZhES`+J2Op z`Kl*mJUWA2rkZ|TNCsFqBxHh9iPFrvS#KgQ^}Vx}5zeaheSXTQD_0$YFm(D(rxXX! zFpXQH#_e;2S17kYay3!Ck7auMwMhPrD-tsog{tW8cdO+o)+@=@H+V^2GP9W6CYW^m z*ti!@E&VXu)Y46T=BsnRb1LRy)YYx4kJAL^o$jnA#b(q{cw_Sn0RH-vMhtv!aZU~l zw%`~Qidjz2CJ7ZzKMa#A5zWSEkiRkj zSnSZbY!oXoG=0~IVVh#B)1NIH2Xg$77hie}83L6O8_x04=>iEo@66m4DxB|o{2i0w z^=*H4Yo=Wd7ua!G`P!ex@$T${A!Lo$}Qx z*wXMhK`<_zLD^h?+2)~rCXe?MrKc~rQpS%%IK*PVyf_}!j&W;!LV7{n3w3ZGcJ{tEiQ?)wc_UX|gY)sFL*R@?b$wDR0ZEoeG zt1Q!$qQ#odS-e#)&sB`%4Hx)qp!>Aq`tKmDFPe4~eaXg)KRtrnqESNnZV|=XLXp_E z?OOO`Fw(nPGI7~E0&(;6hXf<^YJBmG!{idt32=^01R$aXCJT|vUP>TW15VY3#Qkbg z9iI1Tp*KmKGJ{^XLPK{x2A~ZhY*OAHyjq)Pfz# z6sp~?96Tb4gTprZBO`5wb_O-zYHuErOw0t!+yVX}xYa39SMPQzxoma(vmXZ)6@#8@ zvk(&4U-)UoykA$t(F32y1u~wZ^GCzTk~^JZ!$^|0(m@!G4Q)8ZTgle?(=rU(r>O}T zFGmTW123Jm#&=HhoW~*1qSn8!cAx9SRZEHcxcVMZhpCW0rT7Ji(W<-L^g z%c`lbB8pth40lshebhPhn0@u(#9Fu%elgc7uNdbHw-(PAnUoOxjCqs|X^|9G`RZu2(ElKjw0@o1tB|}hnYX+>SJ&aw(=vVmz zlrkz&U#3DQ`3M$H~HFPiuHL@#8A^UG%L^S-Kw_VF?@hz; z+BY#xCty>W;Qy7kx(9G&U_6Je9@X&)80G8?$X8d9(~v%P9s>-AKGD`afML=QVjZuP z$Zx+auAP5EF#Vw(Dt*Qm7~?kWOVnI?5vYO8xiRc`0@xbs=&r}Uc*(Bz3jlM*+hqfW zF61t{e%)d^lR1}|%3snt_Coh3&^~(r!WMwy>m1j;>=2~YIJy3;+?w(0^2!R%y>DIW z(>0w#p2oDvLJ6AI>b0CFOaozQ2M^6k5z!hM02czg{u4s-S#mvjXA1y!);fSjjGjWY zWI@rh+pIrTcrs0jPkLVQQbGKkknCy?s7MlB@jkKyDQL$>irFx24m~~&$FJhMwZ5Yz z>LqioWDh#%qq(D9?7n^N*d=`?^F$*VCQbYy7VsLF+=w8$Aw()D7;6aMN6r=cAUzbxcW zml54#T|LuUhce>)Skdyr3SFCRUfL7uB=aCP*E6@pF=$M@H)!Q}GgxM#bOor@1(a{i z2>x!p%NS-@?YB!-!Ns1gmSqJki1{B|hKdgZMb;m?bjtSv32rVCUW~?IgO@+|bl|$H zzhYF^En_y4fsNf0%9OA^1qEQ3_@8DT?>BZq9o1ic>Ew=F;F3vs-D#DmJKIcr za&z7z+9dfM)Vqe1l#>)nIAfn2(aL>7Fn+b4IdMde(6FjXu2t&p+U@+Yg#CRbtPOC* zNsxRezhscJ%DN;0vlnetkbG{YAt7!%$u<#vn4l|Qqpgg4?TV?>B8tyY{He;`-3-A( z{6x28W$$u1C90h;-+G7SuAH*zzOclbKE#}ngXjI6*aDb$YkyFtLp;iHFWg*I&zm^# zsPgWflHBj8wo1*D@`Q<0S=-R2sw06>V1 z^#wPra53hxF5^sPK8g6x=o;qTHgSeOK8-qKiXBCgfC$IuI(j+F*LB6+wBW7zzlPJ` z%IgAU<`C0}-T+e5fFP=JGum(EX+F&t0u$42)&m>>x(D1H@8GIRjSFm^acApBhbOym zV9EE;>RVk9;Fnu`^m?P7Z(zzMRR=D`Nnv|-X_?cQyTLoUX|ez7a8;Y`-kE4Qn}GWQ z_Ep`Tp35iijvo5FVgwA=|C32y3@ql+rdpbgKdO>P{aNKzKbv%3c|t1wpj58o4S;6) zxmOgm{Ze+5V4z>sfW3W^jsJby)~EV%9c<|RG>t&$cDeY&o3b5mckL{?3kKpH`l`?t zdT=rOk%{gaPB)=ib;>wy09YwqFfgH-^hHe&qdCtBF1 z!plyHqdqMv0n5I1r*E?A@DWLXc-OY#H=*Z>Io%77eJJ0~b{uxO z0HeJhyT-^|vd{6SCqtc%67VFcohkn=0LQyrYz3iso7|yHx*kd!w;bT938 zx5!|Gh{XVH)K+`y%kj-T-rEZdPW^36iI?xzl`dC%^nNeFoLyCp1bNx!aoo`<1=l|D zy7%;ssBcuorjUs5MTlGqP$T#yPxQZfcF)4D5sBkWq>xN<9Xj`RaWFf?W_lm+nbi`vsdz>@)r$PJyk!4@L~XiDO#a~g zaQcU8`48Ay!9Yk8%^1F#z&@yY{@m;1(WzSifR;>>piY70IXH4mBdVS-$fDfEkVD_x zEefwmKa>)if2J`3x?I1yi4!W5%X9f1Zk8JfUAxTh;Y?uPK~T>Hk9>fx(h|)wEiIHx z2<8+sb=iqD9--5=YKv8h$g51!pU2pq(!|K3LhlCpMbnzA(i01;G8(Qi{A{PTH}AHO zt#>73>G}N_E~yUR+o7wP%@rtJuH78;ZC2lF{ixB!{e(@d9FTcw<)Yqm2sx-6ou7nxalanh=oa zEd%Ea0!ZW5q!2{cu(FYhXZx8Wwc#D!9+ivJZHo(jQ#;27)d7t?n$Re$q6WDm1wI@N z@BDcE9PN`E@`7X*<7~1K#ui&`b5HWcYSeVNI|Wqah7ViuUHSsTa(BP3tbgqi@Y(%@ z4Mr=_nzE9;aCH>&cd-<;iri|hBsFBBChndd!+pv8zVGwsyK#Wum+I*nF3&=yt3JK&K#Fv>vh{3poG>+R1`6BgTno6` zN&F~knd=oV%`dJk{b=Z2pQC#D#t~iGcGPj=<~st+bM1q9HSjr_I{^f(TeJn`&k8@} zU1A+tTppO*e&8r^^Fv3&eNu>PGF2P%G+EN=Zix?n^)FXrg=KjGTOh4;L370`&pS@A zLr^LKKQ!cbvo(B{wXFdE?Kwb0P7zh_%rrgis z_ajLtxxFp~FojfIUQS$_m7#cRm_mofBkO6jo*!Si?~u>#p&pcoM232iBR$QIRghWD?~Wv(1j_Uh7Wl|i>#uNQlD0O-~D;^mqXB5vr&TI-4n zF!mK4LfOYj=kVUC;ll)>EnLQx~X{sTpYB2(AxJP^Bezfu8V9(Vu zy9RGIt7(ag_Js`|L^mn9Ou#vEnMqxLnWIC_Na`TT63u)hr>ml@AkuSB+g%vlVY*e3 zDawl%_R%b~0S3FAAJJzC>>UXK*bLUMCTD2q3_Z18`oLme_y+PyZZEf-eg6iTpUh!z zZBNzC55V+n%l+X=55?ObN;j)jKOcCfoi||t!Fy$NbywHeM4%`IZol0?pook=3^{(1 zmPo5WtjpTga_hGyH9Mi|8^IaZ|9tF`I+6mkJcu@p;r%MY9cg2o-Y%I^LE#L;Xh-+G zeO<^lo~mE^oKNvnvI@PqPf)YA-Nc~nJh4hU?EGumg_Jh`JHZqt79ARnSDC)5W?80< zlvaIifvaYewlw zSj9@24=XO^o1PbBIUC9NCq2F{ai?B2#V(*e z^N?TPT!zr>a?`Ry+P3gJq9Z2S>Xc4OrWztXA#^(Co$o)YTDJx>6%3&|nL^=)&eH-)>0J0ieXTA{oBK=-w!PgI1AjWtB7>=_GvTnQ*Y&U_4c;CS1*lAWv zNmm>Ap1q(pPDenCW5PM{$=Pe3u#CvC%tPd;lXSo5B39b52S3Qq{-%}iSm0}+v2Kx6 z;vp?fZxlMcz7xnZuVz6-*{tViQ_20GwL^PF`yVykWC+qpFNpVg>a(ih{luGz3uTQT z1Q3DiT14d82?Pp>Wd*pFKb3FxIOR$nbZ}mtGh9su;^^h)|p2(QmF$BgZj9;1+* zujIr}+66K##>63&pS8SCMKZ1YL6>aP>`6O;)uc2Vo7=LH!#pZ#=CSTWWhui3rhsFU z7###{s`~MghUlsue`&VEz?k()QI`$uc!^CU{g*u;yYYH5Uv(@(bIh{r=_S@YiR_}} z;{jQ&I_dReWf4-d^qNFV2i5?y7=FoG%q%t%s$MTshRJCpdoY~+s9{&smTC(uoRuL0 zP|<}lt3AFZ?ueD_R&kO%QAh!2J%4km2P)2uhixa9uS={rfAY&G>a8)z7XIWb)(`2Z zrCx>ez3%G)! zX~TbgbDR44;B8}aBjcoxhKK_*eCj2L1$igr_3MwLQ#{#nDUly?+o(MQP69@!r}9 zqT4Kn^s$_aMzcw-*C8xlV8~?i2bbCF+!{`O$;FV8OW!Hq5(C#HWH~YR`xcd}Y;IG& zPJmO@9^~4l@XlhsY85~ViFffQ3#{ZIndcQ8U85hJO0+W3sgyYNyNoUIK3;kG9y-1@wI&F4#sBqa zL}|>GvB?S?G|zVT{+|COaoRDR-~5O3-rS1WjZ<~o9(7l7TLwHKB@%bnC}P8YPHvOX z_xZ{iJ%o$_8_qZ5D%@RZATD0sqk9Y;Y?uq@9v{BFve1F?)2!5umNxaCi!ZmTq*%DF zyShA(h)`@e?=k`RSo(mEok4BLzMD4CEDEzj@{mI*$_1YAkUTUR_4x7PtL}xt8^%>S z?eC}cu61OYAatxgU3M$Kwr;62w=B=?+9=%oNmuvLa13tSby2sQSty+aB1R@X2r9 zjdr;P40!8J82*gB^L=>?alAW{m^;H3q#5s&m!ChZ+VFL6JaVOY>{tO7-6T*)m}bM> znulhJV;X6755#c?9MM}iU|~e+n|If&x(9#<#oyTm&FY{}=fNaq87_qY>O^1Ot5~$d zyd#?&Y@&O&@ZuH?V{QJT2a!?#-c2gm&jFA)l|=jpj~Un&GM|BBY(r#Pi4ubSi(5{bv<&xYLNB+1D`-xwNNez%`J2+T?1*8nI6@@9r3lDjCj&pPsv zd-QL;qgft4j&<;iM=fy2{i_zhZ<86Lo`Ff6aZyyg#lD!pSJzBL?XUKuMI|qZ#L>yM z8Sh_A+3)z`6>5vm3^Lh@O;UA?jt^4o_Xu=4>$j128vx&>FS^)X+5FzF1v<2e7z1qI zky?|#)X*DA$fmN;>>2oX8VE%*^b|IYPfSm=jD-0tU}M}=II=0m#ktjqnm-Z zp-T(M#m#<@EB1rvJFrY!I~+Fpyr{ouXEaAC?lF9nSLTIwb9Vaoh18n^)U$zfu?qG| zm4ZuG^&83)*<^e>Kskg~O_|u8K1#^J4F;b5?Gz`tqg9tLgv}#B&vGdaY+S_TGjG+B zhFs!I;gOL*e#dI8B=Cz-c!ZE^hpa z`*yNPO8B(Jv278~Km1N`$PSzzx4USGiZ^cwia%SC44}V&e9n8EDY^}66-6=aEKvGU za>W8FP}P^7F1f25EI}ST5KOUN?89dVGOa(46d-e7Xof)X?+*Pg^Xtr~AbQyZ%obV; zH;N%_nra)z0EG_zLc9a-wwJb4~XO0qfh}{wHS9CmH0i7Heh-7pgH9GbTrxX*^!dUj!B+ zhGqIN>D#+85N_0E4wCqm{G*Z7(x5fh(QFPq-Pyr>w(F9=AUzGNvy^C87@$MNSfJSI zrI=WpXKx(-Q; zQ*fDm)|`Fr0%pyxOFKVN-JI;XkCa8GT1G*Qer;dmedRO#+En`bGwBT7Lb`XqfSbi+ zrshwic!mysHsh1$i&wbZM7VdY6#c$_F->vx*v!eezHj9=?Si({2xPBY=Jd$wxzvww zN}TNLCYoe^bdgg=C7x4kPoTY_=jy^$%$twN)^>^0(n6Rj>=to>K|_bpw%}Q}bg{rU zp?M66xQulOjuZs$@IQ`k_P!&YNOTYbR2&|Dkl3p&82~zcugFP#Pw#sV80Fa;d%!qO zGVa=g|iza?en#UJf76Q0m%8i+X-n1fJ5$9q~Gu z<*7M_en>J>%D>StYVHsAi);_ODb4Rk1Lx&!9R9>yZvLX1F1BI#>Q6g0Bgvxo4QxB^ ztVS${B{cvP^~MOouE9>oj;EV1`e4*1{aONp5Q>e}>ss<;bPP2~g%1^9j0`^uxds_@ zi9{uGq|8xDaYo-HZGC>^F;a9e&Jy54KtsR ztfCMzf0xGkVqaM^LC_mCwN@MbnC1S@F5#->RCf*bpw+sS;&}Aa3tv|MroG_%=KQ%3 z=O6Me#Oq(S{ABc-y9TJZpKC49X<@=r`+zHIWMbDF8xIpbS<>cLI6_A^O-tg{^3yHAd@XX zNTg{X<-$N@c>ElmR{%sx zAN1Mi^05dHU?a*g-Y)QJ;Gc$OAlt`U!_&j|GViE@mSF2lwpTmIBGY2F81B@N?FLK%MuqW=<6;~av|I--|f z9Xus#>Nlr)L)k$8f_p;tgaKu1vP0MIu$f)TgnRrRHc#8W^ZRi>=9(6m8W{4^rUx*n zqiLIhlB8LM=b;KFMxpcl{kWBHibr>sI^{A&`)xS6`9DuL-fr9r2E4(~dj^ytL;VF4 zz$;H)_Vf$mK%d8h7x%8-T!wDLBT2NLAV(`1?2?sA6jZ?IML_~<56O8^R_#!GJvV5u*aO|Y_;hIw$&RefndZVu0h+R%LY#Bv$k;A}e z_(f)@91uzSsurxQLnyt&W&PCktM(rbCIPJ}?VggdgJr8@$YX=QK3FP6vf}^Lq||$C zEP?*9UiRaq6}n)Dam7c!+XnF5gngMH1k31Pi3_PEXE>Tu(bu>?>A3zwR%F&Wb7`2_ zIBW@`$s?UoER%g1+mvbHze4uvcJ*i|z{1Pt?PUVoPx5(K(*&oLLr`X@Ti43^%}ZcK zs~?ntQ8oH0G`gJEyjD9>7y5Ixk?q|rgIHk8I@WKY)YWd(k-1;4gYl z-mY`;(g~HF?JS7`K1+|KchY$;o~J7utQvngbrw{|`y+686m)O2UEK>ns&$>t^A#%E5$0Q)Jl$IR1sem)UoCK#Eq+6<~6!o#BwXj<#`=n+VLm^CnFw7RgUP zx(AbpOX!i~!mg;titE45B>1H!T&W*l)RUJP8z^V51+K|`!a;{z(qE)d0+wWwbmuEF zU?9GbAPUzoUsJE0QI4>JqZ@;0RQl?c)u$hP-0r`K_|x>N*3vM}btcEso1c;2?IMMS zTo#=-FZHa(G=CU9Cf&!w;Y z_T2`DR@vvt4A*A6a%%E40Hxyb>R-r;C4tx0HGygOO!AQ$@Uvh8HlZ&I&JIoG z)^(aNAz|haGlmN9!#x_`W~T`a=FI@J%+OW9Pl_&&{6Ctm@#GW~A7JOVYI%RH-NpfGcy-CP! z362y3x(nc@;oYH6Ol{M;vpVLp^}X^$Q*?Sz3560HE2EyXQ8y7RiX>nKjN7t?>c%xi znbLkxZj;F`c4Y)U-|9B!{E?>PTgzkTzgtB#~E3O|!83P_4zKaE0z4zMK&F6?-P zk|S)eKu!%{Rxx@n6~k6<@tU+xAJ&$2vskQ%4->~P)?J|j$im@lbw~mt4~LEKO#ZXU z=OPoS&goxn6nzALyzpazrwLInfCe&UQK8|wOqk2TXxSWq+r0${O3NAAtX1(yd^}I( zO?Gk6u@R6a$Lcl`6o@PEQzL`K06XO~rM>G_O{8;!nFl(=j$oO>+tq&yGHKE?Jy)W; z)MRnv?;t$j9!0(xMHPy3s=&cK4Ivq?9`h4VSJNr$iY;qTU$J=7-c~t};;!t%;9d-_eLJz<2CZ_?zRbYjBdU96wKPswyEW{GusC(;PyzT z+1Atgre}GpEH;`(;X+*Hi}QFoT5Jhjy%>0~S8Cy#zG%{?1|%81JsJ3cqQFztPZ^@F z)S+(`^StQ0K#qfGvVrgi>bf9tiRT_zb5CTeToOsZbzplC9XuzU(?~Z!z(p8e{E7~-;$8+E3vu1 zfAA76_3PD<){{TNTmRwj70hI(J#ECDZVE`f1o;qOt%w_ZJM-r7Ed{(e=>Ef-gEAFq zIbIf%_|k&{Ru~UI!G_XEENxj8GtXn`294w6FOB4h_wxM}O$JG#4xkl9(<45V6SZtl zGaHkEq~P?R16<0^vz(NF`e@M^-niGAa-MxXZAm*%y#uURMF9UBAKL$0`Tl;?`0suv zV~Apr=IFw?*G42|PeHFg$;VkzCsIz|*x}lFodUs!9tNoAh$9)#^E~>_O?;%}P4<CKYVY+5q)@s%1F;9pMk1AgiISop3mIy+!UT0F?fzJ8 zeV8&B{L#Sf64H5GPIbkkmVJ2cXmPH@&0-btg_22Ged^<93MRJ zyMOZ?Yp(MRxgqw7Y=6$S4&dYaLG~uxWGule1!3`?AzA(D`8K+ijAIMvbAi!(8hCh& zIO}LqSFp)uIdlB|kLmR-gY>pB%mHo|fB`H=dD%x8rvwq5(7p(@X;XPq5F!0Ba);QHMLN8_ zPhtFH7sP_J(<6<$YtoqfYYns{*UPm1wHB@p^3Gz~eM{#}nCaF~by(jFlhJ5|KZ*Ey zK^{fLUt{*)nFszM9{6Kpy**ThCdW5(p2T!&V^H$*C zduF78T#BU*^(sCFro#$u(-b)T7Q;dA>SU?^a+nYn`#~B@UT;zAI8}lOv+dzybuVMb zUXXdb5J2s@ot7WFZI2sg5*npb>rbej5fW7LKL3sIOKwlje zOSP1?y8Fw9nFo2tX`n!`JE5uXg$sC7(GAcrlMN z+xJ`#we0q==WpX|NDnZLRuOLId`{m^V^_> z#BJ&tRnY5dL3@7IqnpZZqf_^OV{Vv7g|u?jTi6)djBU+9GAaDfd2~K=T)}qJC`~Y{ zONW1nGnNItEGH#KEx-HQcCN-Q!ezEW9tsW8mf?Zs}fG zQ`+LdQC{_J4!QC+UQQ?iolD?Ok`Per89R??!&J)sYDw57IG&^lh*rLu>w{ToUm<2M zq;+Jc6ju1$>2e>;Q)j(z-JK+i;I{sE3h6%!-2W!NArxxOP!C>lrI~hAFiDLX=ym$k zecOQQfGe`NbKnR%I(LoMn=vOLO7cch%W!2$|WLSfo42khYgq&_Q*p}G8 z_;^-zMS5c8FhR_^X@28W?$Bqkz~ND@^>R~^YZEtl4nq@px|5*OYbS!He_A&k(Jo4@ zj8Li=(zW$HX6igK>PEzD_hDZHqlUKxDFHahv7BwA9^u5m`Bc^Z?pUv< zU3!Z5Ggd&O5W_F95WNG zZr+NT9WNc`_)LdVXL%OcsBXXmkFK$_VPZP~S8Zn%w zK`)^M%E}i^y2s9QmZ7_D^#VDqflzT@5eXQT*WDRP)W}C?pq?q=Lb@jY^Pfm$|L-%PCf!>SiiPLD9cMlUTBM#cfDAOd zKb$h{Z${CXw{oj9+t1@|qSQUawPxjhk8*TkPU?R5Dt*dQ6N1@F)7jJ4Hh=!F7Ftkc-sBD|a360Y@7Cqe5%y}OX zLT^_T`51+=5ci#L@3(Dfz2{YVjpX+eSsf4)8DeN8pC)W#G+y#!6&oj1;iF}-Xzpu> z-a8c}T7`Aq=u^XTL4#98doUgAdzeKs=Q!%9RA@o-N?Ud=wGe1FUD#{9(y@wlA@+;@ z!~grnZ^{tWG^io-v|TNUoekt=7<9W3hGQi5hY)*Py739jfjb6B%=a4wjL?YloZAJ5RqUXh6;; zj-a!}*TRt!G{|yOvAy>ufFmFgq7@^Ht&C3BQc1439ePO!t0=3Uz^r&=g-dPD6cv+q zB*-~&vUPeB(6E!`xZn(b<~egN)Uu_L5{$ZNjFZF1DLRo3jHEl#kt-vxbIjS|3S-iO z2`0w1@ref#;Ict8AuCpT%=unUB(Qk53&w^X}>6Q$%mj;nChL4CiYtf)5LdbeAi*ynYC2omnSCW z#+rJvXYOTs#fOWpQb-H|=v)?$;c{)Txj-$q#PDLwYKhy91o@CA%we%3=7rG$lF-Y| zE0vm^-Gq|kN$9y6yZB80NekE zs7krX$z7NM8!1sb=M;T~Bmbv4Zur~P4n>@8LGSs$nMd8ak8nWaq{2gj7hP_Va|SP)k3dDe3@j62AL9dVrSJJa zg^kK{>#R#*iw)+UT}{yTBdJlod74Z@ara;D4gSZSGO6zcCX-SzR^#WZ1^`&G?VQHt zV*1<=r|#dTWkI-BlVG=}cy>KJ|Xf{UP2lVu~%{M&|o;Qk0<)?bQ{H3(9Vo6c9bOYNq; zOds-8OmUjd2{N9!gZ35Rs9$~*4BqXZ`E+B}pGnbculYu5d(vAzE;`(??;>9Iad$BeXmPlI+s&;3LeA8fsYZeodFIGm; z0D`J-VViHUn{w3eMVh+bTb9y6X$3nKz}z8oKuHj^o4nB}>owf^+dm@G-wmIoR63W^ z>X;?hnw^UISry_o)+;7StNnc&JiK^O;n zonpX8Bh-DJ5fEJAYyh>!T!y#t1v{AEh$H{%)In~_xOJl-^oq<-q%Gs{XhG^s6^-+F zss(~=NMEXU$^+O1FKx9tLPkGWzUP)$9cQpCX6b6qdFEerYGRI4NU^`9ylH<) zLR~qvkK5&4#Q6DCT!Z^v@X$!;oZA`$n3&Cwt?rpkZDt?WxEx$?3D%R=^95Z3x*>9x z_K?;ohC%D4;@pE0sCx=x?0RU+!o@cMAhL<%E{&dL zv_Oj|AdaHu+yQoa5HL+ibojkaf(ZOZWmF-Pb8Yy+io~pc4&=0*R*3~|cAApc40u;m|5#IZn%x^j;U1#YXIpHrv$!c2jN0o-IqqbVnb*$nz;`-|*!14f!2F49 z_#gj$vu6}in@#7f4k8SF7S|OX^XpzSO==X_(^#@P&C9buy_2&w;XL!X4i#XQ^Wg|uo1r~NnZrtc#8smu zF?Hv+f28L8Xc8hT@t#Zh;}SX_I?7IrfDS?$Xef}pMJ+ln3{g>D9AQHOwxM!5EYiWt zmYmmQ_P!Cj61CjR$`mUXq%Z;-D)yWGrkna+%POc6{QVUMk_h36ki?LmnrJC{C#0l!7uOU1;MF*av$ubp-@c~ zD>6XGSI#~0XlXJgfGm@5Y3_{pfH7PFkXPLDLy8gT&Mco+anF6b2yxi`*~OS}Om znmCtX)31eJmeJci4cm&I(%WFKoqqfbU&)=z?Qpf9i!WaBh4X(lp!ON=_3`-WGS{_L z=fQjO&LLrU1m1|WOMF_6Mf`i~VBgw^znmU~nk9_@hngjlnirrWdL=GcjRA$ku~RTz z{qSbmN18>8e2=j$Urq(s9B`#F?hOQsEp>*|<{`0x01^1)>h2uMRH!?YoyU(xY^g6d zHq+vIKVKgHwz~Vb55r9Ef-65PLU`_bTI;Z`sR)^)bENO>mcLPaQJMQ(RYx=MRz#K( z3CAn-3!QxM4tr#DtC_x9&-Jo7HHOEgbJl7ZX(9=t0`J9l#u+@OcYa4k)-GFWv(6K= zGA9g6q|KE&G+1{i5Dv5P8Cu^=L)aH;#7Dz>wK&C`1fR&PSQ@@qyqPkCgVK2(?AQ)o zn^Sy$IqQ#GBOEsw;R$hQ#AJ}zqRdxZW8pql-UUmAB)!7zt}s2-x!W-N?#t=c3?^~= zqv~zTX_>T4%7O6J{;m^Maq^AdljOdtB*^B=rkd)Kb8$YIv4{61V^v8e5GZM^$1CJa zobUl>(y}LVCJcbhD{_unIUgI7`q$2 z*j%KxH;%xSuYXzjoLngK@9hhd9#cFBFmlTd#3lt^16nCH(B``-sH0gBOB={EHpI2u zd?YQ#zItovVFm)yYEl|Jp4fw-5 zO|qdl+6QzC265uKHqs~0`vLy7$jFzkKM9}U@tjdo%({uIBQXKR*3S1mxs?UVl>`n&euL_QW7s#R{Am&- zH@s{u1ia68%V0;KcyOC%y~6n@$;oGZ;-S(Z#RHM(1~ z`K{NcaS$V8Dmm+Nb-VNZh=@-`&;1SOTH|Li3cT4~@AHN?zB<2mnb$iyv!n8MCeDdU zCpk3!bPdexKLN>i4(Y>>;RmYe#tReOKXB3m5k&o>h5eN^cwp+vzb5)8WzuGypXw%X z{+QubeR~%8(G#sLeyL=*%XD-osOvBV0x3QvCKR^+UKAz~mnq8OgM`ZCTh!TxBfeY8 zgvDm=g_uG&69tGB&x@oYrmb$9mMvDvDDH&V*{OrvooRXCLzd|?7KS6}5(CB1y*A=4 zl!Lz_Bg=c$%k;O(#QY3dY@%rF!=}4HbV=P~WV2$5I~3lFTu1~+pxf*1dc5mD z-7B*{A#DCFK=w;*Sq3fWrE9(@Lh?y z3^ChquYvjww))l6<>Rj>9dsS6yc*)`HRY>~r4@_Hly6fVzSv%P7CF-J8B}_D!by&~ z{)J=H0Z@TPJe5A$Y?+Jwx^Cq2rtA!GaOSsj=kut=(=E@BH$0@bMaI_TSYDZYrg%7| z{9*FVlJZJ-5#bncIhpWSDH1(?ZZ2HCCsB>xL!i2g##?$M8{w~7q~V7w|NPho6ni%@ z4nb~lrF(3~KqX)&dC5u+x~Z&8yE-MwzL}mR_pK$P(}!cxd;y}znZ`4Gqn~qjrit4J zKX0-)r-bYc1xu`j8<2rnN1g9REcVj{3*tm|z@~`~1op6InT1wV-DV5zF!4bN^A7#o zU`C%ks`ZwD2eLxu%a}ZM#r2C z*JnONaaoATpvS0n$-i0SWY)U3gZ&8`3?FXG==6@1{!Iv~gbpZs+LPk@FzC)&Sj zRT(G~RN1Cy+_R??1FPNcwQ9K{#=PcKG57U%5DQid1Jd3FWC9s7eox^?0RVI3>G6gY zVDWfj<7d-U$TXIlczpf!rC;AD=sE&2h{+_%`gv!5#5v}qQxpPWuy2|CWKF+K^hK<@ zZ@rmBXq@SKUuwi8fj?y0oXF8gUu|qQ%(_GLV~W7ure1g|!Fxdo+KD-ncs*Fm6H_qth)7n82}~p~M>8QPl7#cI5kqTyXA@XxJTP zekX=Jt=%mJ9Q$bZMIY|8c16zD(8&TS&wE zgHK8m4t6p;6Ydv(U9Y<(nXh0ryHk3Yd9QP6FC@Jx?0zDcUMZ4B<)atrXrAp z;PAEhgb{Z{JbwD+C$;2N<&zE-02u4O6>fTO|5cNXW*~8mEqSt}+NMuwqv&5Ri`?2d zn!qb**U6d!F;VF^QYT>41OwXNQ>ugRW%wMO!VYL zN)~c^>bBO(F#J>(s8iI&)_O^tW|=Se$l#OruglO>QA5NOYPM<_SKf`5qn=~0UhWEZ zlP7lg%H&9kZd+)p&sT)fcUvo8Lh8h+mFltYbXP$cEw}NpcXj+p*r}b;)Du7hwyla% zE^$hta=Nll(uN~AC@osxhb;*R*^jvwPq6+`wGL^Qg+L*AA&Ztoxs{}0gS~J-zKrJ~ zL}KV&)OL_t$a9U>F7-OR*2ctjVBXASjoZGu~>@G`82QfZq~}!HM}nP5cD%J zbY1P#^Kfl$3j-Dq@EPmEUiNUlpQ3G&a`@7C(0u9Sa6@1)PeXvOu=Jt(IwJGOyjW^f zJ@BcVy!w6Gmtg#|He*EbFI|NLOVZ^_Cj!xkgB5_WpJ3wDc`!z`KoiiPzPSE%<1R`H zuWTqGfvBHt6UfMw5p3VxU647gJ^KG>d-G_h|G)p=R(My|ifm(-Y$3}GW{4~mDwSjz zAu2m#A4@1?8Ii1G5+xkp&&P7V-|jPjb-UGDbwq*SW{fyp16zMZfD!%X0jIQ|*)yRdUW9K`;Bm6r`ekhF zK@=ZC%(=_0@MV~UvFyo3<(T$|jRwTjG*#zrwEASOCF*HYICIZ;ge5iuTrwFztedZ| zG{tcFx_u|zN|~7RoF`-TUD!mOS8OwRRr)LI*IzZ(_;VJ>^ zMS5n$SXZalyB3~7BrVwiS<+7xa3u{{`x?6 z-eRe;y=?1uqVe!#v!4KAtH;w4Wx;t%x=3ejbix@6cDcqJGTT;zv7Ox8eEMoWSq?~L z>Yjg0@T?{e+hySas|M)!(M;83y0&Gqr#~uYxF*%JQf{MKE$9fxkFC4*8_U#O2gKXi z)%_bi_QtOp)-U(!8DiW2V}p>cIx8zQ=kzn`UW5i>^v1n}b1aFG$kE>ha;QDwm^Y^N zr%ogM4Eae49&EXfhFgBT2Nf+oGD()Z^g)DCB$WRr<6A4JUo0!1%uvTpAG-)|(AQUS z;GOgUle5rq$J=UzD1o~&?kydOhu=(&7;$$7N-Hi5Fkd@U^c>BkZ1c&)sgi88A7Rl9ya`41bI(55A9N# zS>+0STcwtfGlGMfkNg2T?CC?T&(s?m=cY;TNl|ETo_EP|3-G<6!uO8A3$Nv_Dg%Ps z&-i!CbbtL;0J*Fi4WIV4eYp|2+CZ$IS1R-~1OvgHjJxB}W`M}} z`J6=KbvBWHA@dvGS%YTjOD@VBL)i#E{VEM+M+XhZH5`8xpCM498hygfDR(R@SXhw2 zbuQn_x*T?=1MWa&1eK_Zr0#AX**Zk|)+32`oA!2k&WD;mv2hii$$N zNn0o$td|%w<~rF<13hO?&@&4O;aKOY){FCp!~nRWmxG~C6=%ahO>R-|Zg3Y$N|1-=bH_IdF_u?QNJ1_1IAw(SM*fH)0mBR*h2jXrBhK z<6;RO-vu@)Sm3^>ExDbl@M)4yw2B&>sD9=o!9s``zPB}oJW!jFoa{Cev{~aHxz4+J z8Lr5<-Vkgisb6@Kj!S7hr-HawyJYBkr3Rojcxg;J(iFGg1+M`&m*eNCwOsG1GHSd3 ziq{JT%97W}g-n_F`z4xt@;&l3*5}{Pu4D#xy){_%@Z$PcLa3rr$>jT>0l6Z zh&pTG!5H?6yGk&WVqvw{#C0)qCIMVUyzp)F4d}Qsr~u!UuyPZSfAYRZLwDt6BKRT> z%&v?9pfnZ9%qS-88yV%9T5s?0Rl1kT-79c%b#eQ84Xc54=nwziD#CmC@%{+7bVGXF zWx~1p_{_ci*v(qq*SBcG7yY{Oa(m0=egrsMz(5mEB5tbl-1oJn9edX0M@WLTc*>p8 zxj*fxE)tP2bF^DAzcRC@8)#(@dolROr~S*hyr9aF2W_C3UhqnOMo?cyz~aeFf%(T+ zBe)i~<|+r8aw;jXtLjHW=f~500v5WVVg*s4qeVThDrc$_Y2Byp)@KMQ13>$4iY1@* zx3a+pwp2ND6Yn!UZVpUN2n#s;)u?=|9+K%mnNS)3;#9u$S=(x4PkG)rc;6)O^WpkJ zdiv-6f>EGPFvkqmv}!QOYrwimhYjZHun|Xfn1j^S53~DKmkYYPkGEhB0j8QrLgpi> zprB`68S7|uibgZm{M+~P$A^;z)WYMmHA?SRj-Tr}vOxbdVS6g0u1 ziYFu>_7=IQq;?b-3UnkZcaH8n_{k`69z3g`cRHJ8UM$(;1t@E|WiEo%oeBC_DtSAG zN#3peKK$ST3+0E36W*>sqqTJ1Ai&|>HF6k~s2zZ#CYkOeX|LEDj;%xv-U+pgy4DU` zDJ`;KQu9ar8q3jllwVtJJ(H^w8s_;%zH=L>Oe1}ate=zca?eQ338&>;>GfUT0g-~)5uYfmx3+j4v0@-Y+ zjFC<)&AUGBE=7wfhaGy$LYO~u3E1aJg4c|oc(zZ=F^HrCD!bnAI5qyK-3<4}`vIep zOnjx$*?TDk*o)-2<@idglQyOIaiWzS%4HXruzk$%Zo8y(4j*n3h8#1DQ(gYTa+itY zx31Q}q8J-zTuf!qse#rT^p;nmUWzijb^5ZxrqIO&C0EgbrK5Wv4(?ind}tD=wru!qH*=udUL*co7Ooh-T!1>5ZG#_PaV_Dv{*bl!cZLOhJP)jH z#43zbCgaUq{F&(oVhsm9DEwCN!gFm=a8|SB#b4yfeyw$9j;^$z$K+cyct83)$IDst zl9)mL^@9u$ov3JT(9<$Obr7;oOS>Ai9kg(%c+Goah=+|@SrEL@4D$XCl%4g(R>#gP zY+qqqc(Th#prXAhgJxvi0pn6_atK%D(?8>CReGlS9rN+_itN#R@y6Ixg{S(rH*i+3 zZ&QF*_ewXPXOX3Q$|hS+Z#Ev zSAII%#KlpzRcB?M;52nI0T9-bfyJ*2C^@AEaCMp0COY)O@2=~HYbd_)Gf)Uu+k%DnP_974Mv~=$puo(-pQE=n zo@6_5cQS8%erlUz4fV6R7^e;LzwIcX9CdY0PH;n_0?IvheW+g%aPxt$pDm&jC47K# zg(A62zMK|O)(zDEb?UP6n#oQXe4Ztlr!ZqN&lqa6(f-<6`$wV*=V5rX)7}fYU)XeD zueis(BDZqsAB~nN6HG`2NadI2L6!QW9S>q1dAPtA8$7+$)twzSlCpb@dm6 zuzpBzG>bY@4l`5K?^k;t12qRAu3hh%F29W2+ytu!MaqerP%J}5RYH{~_&eM@O=#Z3c;Q&O5F|cZJQha_dLJ+aquQyV+F!>9EBy|=) zjTh7rg{V}QF}Hs%9QHX4cE;)$WjhLn7rW!yhFpSDX-K_3wb^dxtU3EbS6&9LOjfBh zu04H8OO~5z*d8k=YU7y?34d8`{Vx`PAjQ6uAgz(ZQ7u=eUXUnm@G+L5*5aksf+hNd$_y ztxJcx0leoEmx+HNh299k&xMLj;YAUGNF49uv8A7ixV1Vjom>KKXp(;{EO!{U}EksN| z!omI`Gfe3yW?EF#io7@TUn+LVSh=GxZ~*4)^Wb;0IM^vHBr;WBTpn-Fjh)@;Yi3Qh zoU6+XxCjGe<676h9Ns`2)o3u?GJ6d~Sdh8!PpZqm^I^Z&tk>6AXA^xPmsD*%tKdzNRh3HSCyRzj z2ew(EnL}wv4{&q6y@tacW-@nPNvk1$#ML#IHShR)A~3i*5nB4{ha{)&gw4dDN~}a{ zSu8ksV&|>FqaFu%kjvY2Ph2%&Y`12Qx_D$p{3-ZwtBRFixqpJ7asuo?Xql~&KJ&S$ z#)I|YJ*pfKae4DJ?r}u^2ukxS)F$K(3WjMmSDE}FUGhs|XRPP&Bbmv2I;-}U7(ycG z8l-0-Ad}31b+T)&sQu(vVLLxty9ZWG9IBEXj&+bac!JtbCH&aCv@zs9-Jwr5id!JO zV#!ilTbY}lO>M*8t1jHTv`k&3$@3X<%dErmFP+?jc%GA3-~Co8 zjx#ZPZ;n6jk1L9Juh9pGm)Sf>ESnom-aS9K+#Si!TMvmy>6N{5t!5s>L;LY#i`$~; zH5ezdiaYjV3ywH zLuHouZG_C1aISIobB&iB$A4IKVq|7~(tv=QJ$ZEjQjo!FxvqnpgIO9!%ObI7=#q0N zueQt8a~a=WPK=HGq$Zrh`iDN%4z=iXc?{O^$nkWQWVf74Wfl@ZXtyZU;FKD^Op8L| zbKyYmR>n@#Kt3cUOKyJhXJ!aThh?P9ud9NX-mQw93FqjLLcB%-uk+>{aC)8tfmy&jO+W3YD@J!_cNH&?>~ zJ9KYS#WK+~D!?yU@X89hRY1^-pC9|zpRNEjIpBT2FLWN+pI#Eq5A(ipJ647*yCme2 zj@Ho!I)%ppuJsO;AeJ{<7dqn~BP1rJG!7;pp1T1kyeB%*$FqKSbmAVM01583u!$0T z^stj?b)L<=3RJS~S@$#;`@eC${>!=alEV6Ooc8L`GvcT_Zjq+ak}rNjbR$=F7V^`) zOC;#b*~M$9rxEufg2k7gXfx6R4l9z#DBHYn1y#x69n9~MCtEfg(IN2FNETSNt4#D~ zH-FwA{qy`Ou!o^?Z`$Im<$hy#A3fB7gl9x9OFi6CDrR-s%N~S$4s)}eV!yC-nTJ!X zS&l2A{*P7io)Dx6*|eAx&1a*utlb!AB@ACPaU61x;gwHQoNE>m#7lu*{B>X7n`2Gw zz_Fm(89Mqd9Sr506-wXE`q~0r&d!F4BoMwfM?PzbcuZiRb-PY|SW%8^`T36n;i}k1 z`*hc7io(&IGVi}ggSuLwJcd=W5Vn&H6D2Y9nxL7!LeU!|eZ5>+Wm0M~gJ!jEpbY{2 zpgL$1M5k#Y=;p*5uEx%{XtSFYtFm4>FPAfTgK_TnJvro)_Fnu?Mo_-!Magtgh9xpe zt~mPkb`ih#W#Tg-gRTnaU;NndNc+Q}D0PepFEh*am}-wrGl5GC<+o#AOqe%RV;Sy7 z$352Py_Cl_W_$TytzyP13W0yE>h=Vo{bF6smf=#)TACoVI|!gUy439qe+?Bar?y0m zSrDq_ghDeegx@g`=idBuY!Yf+s)HDK(G{!pYMe!cg}iE@pGfg7CYW-10$3>Wh*pKxTu0BP7R;YZkB<-%42IQjcc2K_jnUViRQfM^n)rrQpu|of1~LhV5_Gx*~th} z=N;p`PI#!rGK@{hZE>JBwPE8AEnF|T{+q{^_E5m(kJ(8naC#$Ob@p16=P5FC0>22O zf2{m>9T-KyL(tC%+IqG4Zxg?h#CxSs(9WfjOfd3q6F(r;tD4)mYcw>HcGr{I5zE%y zzin!?{6j@&QjYY@NC4R{shhpa{dr6$;3s47vd;y+eRlRSghzf-3g0+eE7&gL%WI6$ zmCqLhhaOmMzZs0;Jn`>)GVnSc-TodTR&k;>JPJ`$X0f@CseY{3jza!=0GPvG+<^y? zei~T;W?4V$jO!?=H&H=PlO?%0*V*SSy#)McElwnRhv4(|50!B>!AU&JfbldflZU z#~dIL0q9Wt_^g{e!BvZ*J_K$%jHzOoyS)gATK5);?7JPCIBe4 zmVS1oC35u65cmkN=bh{VEw*D_?_Yo`!-TyCwa19b9TAXRdxtAbD1;vGxxY>5YQ}>+Xk!!qm%_E-*+zgA)i&h0e6gTGsz4jrB1uK(6_X1{wm?{v@ zbz}whVp8C{Q^faMp;yDs-l(^6jc0m0(y;C|U((NhXJ92`vm385?8iz`bmlm}*;DL* zP^sPORdZ}FKGUmKXxlY%7T+c5fSKa*Ml;YS1{J)#ZMCFJbN)|4DPsDC2=R%UO7EYV znFE2ro1|>pi^YD3g8RAO#g{4|XQ^9-;xxO}L?IQA9+CLUUe&eIm*`{94xMBd{A#d2 z8Md-xwk!N0Z@@U)b2W+{Yf@4VZ@;Hgg&9wMWoc z<+0>mq8Sy(j{z~ZY7C!&e|`(ajK8qAETpD}4~fpe0oLujlva+mugj*Hmcp9YVePH- zV7n0Vr74~&BZ7`cZubs=rC9~L!7JuJ9!O%na$;%Fg-gH=YwO^zT90Hxd7!?^;{Yr% zH7jVkYbxj`pNGTyp!K)N0?&OHf#vb;gH8q{S*DTcNU zwH)9n?HesZ(EPn?g#h_=1voB4;i{ic=R!rVc1#r$1aDmZu6%WQv`VAb|P=QOXgmq#VD&CEhdGX38`9^WEAo9dIksQA~%2b z3ITRDbjcD;2N#Qduie2v)aZ>&zjzsfK>XGZBYT|;NdqVHrp1S!Ssd#+pv_}zrOyYu z-kZBlF;m80aShA;_Bk&PmeyxK*3euZcNxebW%@LzrFYkg(q!_%_m2zrNU(vG?(Nmo zIuYa&+B0$c;MMkRjul;+U+8z^^`(VrG4VfK_JD@Dr+;iM_~W-Ere~y=9Xcb$(ueUE zH$cl71r1009+S)xh=Cy73LNu2+Nxc(1;4b1U749edcLIDssWI{RN`8N50mI$0S*Yw zN%si;(tO*K!>Yz`EAoBE34n!V)U^RZz}#+op0Elrl1aSnqDt-4?(Wj6?n&qjFr<54 z&tmF7^liB;#da&>fF9_zKXr2rI`pk%M9~saq8u$M*^bGP_h8Z3caHQ~-v$;yhtJRz zhxF{bSrGzXKO<4BUOlDrS}M6Cn&O3}>@=WY>ZZc;gEh6MKKfg69@c+@N2m}M9sb42 zU6r!UqXyK7=+9)mqG%RPUM?H1ny7li$y`p5%$G znWprTCJE3A881`I`p>V0?GkA2RTX?wvN{;|XgoS#?MlaFH4D*Xa*WW9a1Ds!Sg!Ov ziW#0h2*g^j!LkDh1GiRW$E)W6F;h%ijo%kXIqi4M>5Q$|#czf6{>tezs!ZqP{y#e9 z|MoA`1K}TyfF=LrQFX>i{{d^=3@c<b&TC3%)(UuJ2yEPYcw$3|P>-JE>BI9v!Bef9|c!&OBsQ z`{;}8Fi>y$lJPal$}6?v4M#bTb`&}sdHKqR9B1Bmpm#5z^7K1y$*=wLltn%Wt6J{X z6D-o*ptai`Xf0hfvn9me0l^XD5{?T@@{e)NuGZjSM5I${zMc{FK1Ox^$*=uK!+eWh z3Kb#LB#; zqVqSP%cF_~RJZkO$ex@|dj%Wwh?LsGgY|}nRUY(9(Nvv5BG*7g>a{%e%@$6j8vq7c zMXtVb@TajI+t6<&v!!oZ)tpf#`wOZ-c~~W7l=y3SQhS2uBOCg!1|Y=R2QpVi$x7!1 zrruwX7vo9sTUd>X+bLJGdK-`f2J_2~1$kTcjNM;XNyh8qW5a&(oN6=VY4Uq#&MIkm zgyjJCvx~RK%8ih_p_8u^IBB*VuFM3rO|JczIS8p0sXMLU_bHZUFL@DJW{PO!DOeRC ztD-YKM$|pc;%asj18=3`z;j$f~zMgrF3GTq~Xx6E%0 z>1Nrr_G*9_nr{cXKyr`w8>93oJ0l=uqMPj7%gX%bpvqvsXKJhX_|Dc&*!{gcOCOn@ z6>^iHr&1?XdwwZmQipnHPlX(h;c_lR0e~pd7M%JqZTcXSd|p2!0eIcs0LFn1f!w{K6@aA?iporT_3|9C(HG4=L1+Jw#;YKqn?ETXuq zd#y>r#oq`3yNRb|4@{Ht;ts7`|J`>^j^X3dBQd>LUOmRf?>K8_Oq87RuYHf^e5FaT z?U=<@FZ`sf+IM~M+(V91b!oF{{tvd5R8+iLDT>R-eDD>G&MvZu!v zw`p#7h}m4a4gk=XXi}$7A%EK66B@lA0p7QOGk|GxsJ~r@g;cyrdG(sZ0%`7FZ}1O| z2y}>OP}p?0@%>-;MmMm)vEkMwapY zV>P0Jr&pOZmc>uy9D=-}vK}*N#QXcwb1NYFvI)k&7~i8jRjL`YB#uxIvlC2B>~+Z2 zqM<%!JC>ykSCqz%N4-FojmSC{RN0#a&9&V8g7ef|xJVmc06~msjd!>V_05CyeIjmW zTDU~Ty-GMymY-7@{ZP9wR4B`t?KqFh)&}7zT$?d4MAKHF;2%hkc z6FuUP(H*K*VWE|qRx8)B)!*7f%TRUkPzk#aGAc8*3AzRQoyHLUt`5(WWWNic*F-x< zgsNLFn&19hfa`|u7GF1o7|7AZP^*EIA%{1vuz*G)pom##OWYT;k7-ki@04-|Vw;LE zlvRf@o1`GD16E`AOH1@g_~zEK})}KzH5E5!q z`r3xYiF0W|W zr$CtvJCiMnaV^1RAxZjNx0sGBy3HzOcc&aMW03l%pq?$Iombevf?85i;k)PM@^E@* zokQR#vCv*^C>-x-DRH*blz$vRBx@-0Ff<|yGIU|Yw+l5@7)R8kI8A8iKW=LOvxjLc z;eB~3lqOPI-DR?ryF8lSB?+(;x`$Mr)?n7KkcdRiL9-Gsv%p&$qd3Y8>IdF}e#&a; zNmDOV<5y9c>M<>ndL|g#=I{H7rUwtD-OY+K!AE$ToQniw0bPoX2x?n?t>qbL&#`cn z9bkO1upn9%soW3XRo9gsF|F#Q8AyJnYms6VX(fFwG4#t3LFp*ll(~-;36bs|DytR6 zFKlN?zE7hAp?BE^A*L>oUSOC%MJkh#n$PnovnGQT=2Zq z{PMTL0{7+GYnKfkPx9&f)DFEGsmYQ}{~>2aE(i6FCdJ_D@7H#;OAH=Sq6fcZ=&aYb zEBEH2O`GDE$vo*gpHK3CYr&9$*h|g9MLh}B*2AhBG_@L#mNkt&As0aBHlMO6yxVT> zDsupG)0|?koLxMv!uRs_Ur#=yyG`+NQ%r$nwU#UevU)>@|9r|tO3;FZYOXTSaMkYS z!erpof#erVIUF5g%}GJTu>Q*b=Q*lqIQ+hPwU3!)vf*f`@Zw=p4rc44$lwZzt*7do0Y7%4(cft)WFhs+f6Jp9wc_sIbYkMp2rd}sPQl5qQqEg-&;f#pd0qZWQUjdhy~p*) zSI>+`3=K+b-C;1>%gQLkCA|NqGcNCgs?`@9Z%*Cxj8n%F`yXVdPYOlR#K41IvqaFO z)Zj^;)9W>B@4LOxsK0AB{1#@AB_w;(Wt}{(Nc&^ulWo}lxD*}T&VL}+{y}f! z70nk76M7ihV_S}&&yJn|gcM^+Akp(3mph8PWz7XQ^c4)AhAsY8(cP=oeeD?^@SnH# zFA+}UL|cGuC7~>R?1S+0w}DG^2$F$>SN>s;P+$&2H*OSP$_YIbfC7nyL8mW^#o39+A-`<{3_%Q$~BMcK0#Hh!?Z$JjKQ z8L;*M5Tn+QFGa8HmruBSyK5o$O(&wqr{Q4g6o-KcscdI?G1PYy-)Wefxnjk@Ew%_W zcB18fykYm(|8-L4_k4qDr8j!7tF)tBif;5DcPrP(+RwObO^SIn2&#M^dL@c3!a-+) z7EKlII_>~rx{T-8?s!t4O_F_1nfVvikqdl(=vBwLe-{SC5BVb!Q!D#RZb@Y2f&VD% z5;2Z)(d)_Wpa7?KYBT8Yizc7mI0Ws*XRGj-L37^j7-2C~SKqJ8n}j|c8Bq1GMD4>| zO{_%&Xw0c3u4)AV|8cAIN57vwDOo|dr^-f$(FT6z|I4rs`g>c9RJ$SXIHzR_ux|J zNmqo&030})8jS!w+|(qo%z^Gh!EMxkK0yB({r~^09+`Da8){rU|0igzx#lnbLTlyz zUqNfpU!$<2qZ{?w`F_5JRpIsc97#f5(P(WyK|Fi3UGVT%6ik_c|7cN%BvP>})o^Es zd+l!3#(X16;|*H}A7~q|+Z*7qzrDH1+ov!n+GrNJ2mkLqkk$pln(b*~?;m}vt$p<@ zrwLYbwBM9GB1X_-{KU*D{>)6To;rg~uD*cSz;~WXI9=?FphM0C%t#G7;lfy=w9<^dw$ z04r!ZfR2iLGs)Rpb)D{%$W-Pz=BeUn9l3xFn+A|zYlO5v1pb1TP zu9zrL-(+aGb@}Na3YjDDX2pSTIqfd>nI*m2DR}_D4=Q+0e&h0CrJ$zZCZa7H1^!H( zd(FG--+IARTJP*67k`8RCq!pJl4EICx@q^D??TX@NRgC>!mGfq@`$C6CHPM?Jilm4 zza!gy#uM#Xr@gMOl38ehn{1$-GC+6=XK$LZ+|cX};CVyiJ4g&NWr+>YCB53qfM3G+ zn2Ztyv}{ZWqZ;JV?0j;Yit^O!x_Y64qU^cH+9btfLg$j!xUTQ%j7ylGo|#)2)$0Td zR!^l3e!QSE5{uAt7zZ*o&AK7IlC&GWYQ%gyAF+e`ROyPN{T0VCFTU?}xEK9p^4-rYT)~)soQnUKDP^M~D{T7P&5kenVZkcS1N!7Q=l7>&D zy`-_g-K9z`CROojsS^ck_t(u+cJ&)9W_Fi5Md_#tS%u~nM@>iX`|})etU*7j?G;YF zNzDE>d$Q+~=pi0&MBLnEqp)fNVL2>Hh_6~{{0Cn>W--)Hj@582j?hKHtllWCzCX7J z2_|6{m3D~!gp*O`TMn9~YhFNL_E2$R`BZr=S%cVrahb`Cq3JbrLb*w|p>i7{p`RA7 zB!&?F_|5ntgcr@J!`4AtC?E*J_a^rAIz*zD0eYOm(XPrm(q{3to$aLRXOdUBs7ySYb-0H5v<$apJyO zPW7pL;-zJ4xSe7hsENpZj4LaA3ei6aeLSBj0{Bvz1Op2lb$hej&*5F}O+gE9^JFWx zOabjJLfJ-QWC}D_b)DQQohld_M5t_=8Lw;uQs>(|5bAO}>O3xtn$>>pvK$?Lh6$s< z16>VOpuMA{rx3SY@{7o_>)k(6KU|HbnklQ%kSOj!!r>k>8+_QQvwjz~1_rkhg#i@+ z$PfS4WA-Pb>Gf6f$B{;aOdl)CI=SAITsQ5%lBD4?Q`cK%EbiP8NEqi{4!p_L3HYY% z`)b}hu0&QQiy;CJ?bzTy4VtP9+IzKToFk$70|Ksw0(PH){n?$Dp<(Y6e@ z(D*Xg1FcMF4I44z$b$hd>@zq5u-^Z&#_xRjWRcBqE3_phK-HPA% z@$-2TN~wvDJ<7npwYRvp7}u=@)%U{R(}>Ml#{bPMy!;x17s8w%3yrLt_#&49db|4& z_wgN8xGwXKC;t$KBpZA+lA6K^*i3-i1K#o%qZ5Zy7se}%mB*d$=4ed9Qp?7O?kK~l ztxg*~Ku<}7!wNNeAitWGmhtxRor&f)EY=q9vig{$f<5g&%VHP=Sd(wJ{3`yvLKwtPQNS$A?c( z#yaHo*C9QI_Y&vvGE$4iJ zmw{XjmD|&le+d=SYi_6z<}}qt3_Lz~dNZD%tv8t^MGlyn6!%@H`uvejWfRqA5|;zK zH-Lz{XN9dfLV3E>Q)v`)8PX*%$l}$D>& z>q=L_w^W%(F%`XJ?1^8Y?AlbWg4y>GC6ll@%t>3k^d{gBPHVu-d+cd9=7>rtZUSu5 zrl;gjKM$(6CKveBm(&7ko;)2hDrHr*qEpM}G2pq$bEnc*y>X-ho0R3nX>RoC5ev^A zp6)HCgop24?9x{g3Gp`NEDD8oC%pkE4jZ^!`g|vIc1(qbtYN8DMSeR^59+9nZV&7_ zHW!JBxAwE|b1r~iT5=eR4*48tC;T{(CepZm_tBP?fS(w>$bVhjgZ zY2zJ%cxkO8-&(!cuAEBD%Wk%D3MH zdYD|lk_qv6p>Ar$vidP~b*IzPXN`?C64=bUtd>9+MEguVD2T+=_(}aTEg}-A;#0Gm7O;MUX4R{1$zj~ys_@@ZCNa_m zIUL+~i))JovC_H$PB+L;*8wJ1X5P?DdMLMuFex+gmhd4vDv~cZBmXTQRxUnDLf5@3 z!Vvt&KI>$_tmGf%gxABSd1~ILuUpP;mQ9~~go}{bn)y+pH`L-fEZ69;WY^4ExBTt% z>XWbF`=HJEg6?5@{^Iouf*M%N(OGKOe%sw2mcK+ikG{N zp_V!fX=5|E=f!oaQ-&>y(PUt5hNFB8VGhx>{fBF7L75IgAIdj)OHi_3Qi3x#^0~Kn z*x8Dmhvw%}Wqoj=KS=#O%De+0k#NQikpz=ayN#xoM!{@(3VE7Po{_)kdb{CAB+_@+ z;F_=FOd;IRi~KbLf!lXqdFl2Z<}3Ct<_Ggz`p2CW&e7-N*R~z_KKQ5st`Cx=WhAs}9!`{b&r-2Dw3QON5N|$le>kL|Q$PVYFO==|()8;2k?*<8--drQt`} z8>xc8I9Na5A~!)Lzr<)v4I*jaKQ`Y!DypE#2O;E_6yJh->ZimL1a)^g3SiZK{S*bC ztvSzw>+!q+mJ#@ft7k6h0}VKD548ge*jR^JzZr1cThD5f zYcC-#>-^}dcVH;u`8cFcJh+YMqD(Agu!euE0H{6be(^3jn5Qs?Ykw_3fKP!;(@{bg z3Ox)j094nxjQu-r1Qp2~kw$=yK*R7XQL;n7j-mMARIHDR=qGJfwR{fqh&QkqLCziZyX3f!ns62t2s!JnO{hx;pfjH@Tl8C93NSNO8jgEJ$X6@bG? zNy879^DGLU61WJH(ATXd2hAt~M{hM36Tr~$wl=-S61X%5qG=+DcSg*QQk4li|EA4q z*5@A5)OvMq)3~LeBAULJBSTiz#O;G>N;G{Np8%&nA|CgsI|A(QaW%mhy2yrPN9MM_ zL?M1%009I+wCA6&4r8VH<}Y9sq?KbN{4 z6E7;HRRA=z_FfJwRgo+@O!$_=(8zvqO80~WA3#zDGF~cM9J7Wn5TO zfE0t!U6<}8y}9u4G9n|K=_Z#xpqSaa6W_4Q^f6Z7?ADFkxR@yx=mThA>WY*U-A&MMuj@C(X}4!H_UMya`qz7ERHkYO>S02Sgbc z)K91;4wRl~*(+zH8-tx$-aqdTTwi%|&_ADy-M#dOIqHpu=I>tvL?!KC`h~O})GPWQ z^~%_Mgar8me#uuN80bb+Wa}%F*nWAwDsXb0d6um;k{7zf;(H$-CjIV}OBSMT{K}6I zYNrNRfXB$ zTWIO~#IY`jDTIM!rK-qO+v9L1M^`^foi{F~z+WH6(74Qf+?R(U(;qy85`0k`8FP?D z@e^bk7zi|d9EDVusEUJ9vsj0GEEE}u+WO%=y)L9M-@Q##V7|9NQd|*cLW?~hru zPG%kQbwKLE8^~z#i)>acpsBjrT%GS$&FXs!B z^Ll`}>rIl9gNy+{D7IYcqCIC!olav%^0|4NG{?mJRFMqsk4nm|*&`N8eL{;uHSBWf z9^qd-@6m)<&9VV94NuySk8~+NxWexqJysm(N9_yG{K@8?zZ>Y$#meicQ?{Y~jvmCq zfZopUH;LFXwHkiYd7$BQvI2hAz65Zi;{RbFpOVX@+57Pp?^NgB$E}3^m(G;=Wa7S9 zpz}I0_&DJ3I{C%7@56(p@}9OixTzBXZ_V3&KgR15Zl_2smO$y{QnOahv;UE+?n~|5 zg~BhEW#b<1>ui@n$k~_0iyxzhxk$u>1!4*Y5tO@9rH@Ie8H99ZiAYo9*?PUJu=2tYX+lNQm>pj zFZ@cl^oq{NDF)7PhC-JFeY+u(WvEO#(<3Grrwn&2}{KAdVG1ovuwCip_=W4$qce)?Cd!&xjnBa1XEzqSu6a+aR!2)${;9AQDa(#K^m~raMvcvATOyidv#W z7#WxjRs|Wa?~>ayh`sd%_A_c~6U`Cr#K!F-i-5+ z9*N6>;k9f9R~>@(bFoztr}yiFYc0?H>A6??WH}DMx2MvStAV>T;d)suS;c<(Ztpg` zDktqUzQcSoo(t~TLrRHNQRyu@YjV_g244BKcU!j}{MqxLzx)67XENypOf4J3B3R^U z_DYLVOl+XcPgJpfk_c&s(hc0NMh->8jGayB0c25cvVX!h;}y?{(tC?hv(aBYQ<;6> z!l#DF9r%iXzq;p$0SM!2$}OtYO8{X!^>CvMdQ>mTsu9h-^&_!; zf3*KCY91}Xe%PsH<&E69u~G6G0F1NDk16`t^=eZsCMFj?)njedp`&X(iu)rd+D7cW ziqTg3yTt$casTUYkhLEb2MX@(IUJdx_RJ>-QId`4 zxm_OzP;ml25#TQrv~l2aQ(W!lIoHw6_Z4bqf3dyX65Rkb-I-^?5>WL(iXIgq3ge||7yR4_6PXo zhuHcBVHUN}-u+%+Z;Z86+hO-lb^M5n1HQwtdPK!X&B)Qdx3=Yen5{nnX^-}FsxRaE7E8q+6synH9fz&k>W*>zBhGFa>~miXp(GCp%nmp)Oh~Pl zDTrmt9TT`IKh2spx%}(T)P6c8@C7*XNIwfInHJ?oA2A_{(Vm0yX$*@9>2%^-yX~#-tX7(`Fg#c&jk7}!GG-+$aP9! zXk}nf&?<;BId5Kw69D(P)yN=D^Ob_KmUSZc`*Y^&v#Jhz&xGg5=!Qap&(p$VGtRvPhyYQCdZNfSJX$1zlb2vjF8(+J0xIXkoy z-J-ZY`=hEfop4A3duPm+BM9u|O+)!a8y;um%-MCBTo*H0O@W3J6dBMLmeZX^l_%{z zf;N0wj6&_4%bv~NF}+E67R-MZlZnB-rG_r*-M_=oV8oNH{fePncP+bPGY92u>6mWp zo3r5Q?r#LP&Aqn_T+w7qi_cMD$2Q!rrOB8+*#H`PJvr+wcl+k4zlh>D391n?W!X?@ z-4@G0${oT9;q*X7<;a+cclCH;^?2n{`P`fIr(C;5avw=i2oX0qc~#GDrrad2f}&1I zmWtJgO82QQ9NY4#CZaM#&_{`0nP&q$JD~uS8cYj|uNgQpq`WdtcuExa5CyM&hE9>bn5;_Byy(4!Jp* zVm93{!G?OGHm!kgjr+z~hYTGF+6sxe{!5@%xaJ9XOz~jUk`FSOy-)PQKF=@XPy)9F z(}5}?JZ}gUR+CfemX=8R#U_x4%vwlb1D+j@T{>K(#~F3RTU(-}c1)b;C6V38l$O^K zmpVEJ=WG~*AggP;|03j+#VMHfFK9cVzg+*e!lrwDTIQRGAGa@XUk+^vsJuQEI6ABx zEt-k&M8(Aq@$uZ$AL9d^i_i|RyQ6c*7yG;z1G#>Xm?bJ zD(mo&^FCG;_HEb!w;;M06SeFRFwriL3Y=z_4Ynlem=RFOi5vn-NUml+$SO~lrls2D zY^-POP7hDlkEQ-}9PT_`*8US*Q=1k9V@$xoLm`WL3w{oHXN~Tf1mMjFwRoH69$+LV z5IQJg9foI&bSK&=j=8h6c)}@1r3s{=5_q)6jhZ44xf@h)N^7(Be7T5K5 z`Bpv%q>nmv?8xsU_gKm~iqai_mG(XD*2XD=y>MbzoIiQk9(-{c1pwKpFpe2rA1rPh zYt6P-|1*KIBB6N8Xfw-pH*zx9Zo;MC#mj%#n7*LbGj)dpXNmI&0&J1>Aat%x zIa4l7cvSmx#Uw)Nb8$VfB_lm7AEC6EwmAl?KyFNUmOh|04oQLY^D;B7q6Q-t8Xx7) zEx~U6Wn7!6nuOkXUm1XqP&=`3tR7yK{N*1!9~ zqShSyIo#8#pZOE=vbIkNo5weRJ zA>bJ=$D^(WFbE7gq&8pGl1K|{p$BV)H3yyLWvGT0We9dDMMus0vlO3s3}vvphAH0#9(Xh8`wKe;DReYae)+3ZBx`@tkE?nJCbRE7muIgMeTUFgema3IE$x>ZM10$#!0!I~sd+h%5=Nd=k|;=n^g z*_Ml=+EC$Lir`(2jyE6CX~_A-Y!)bO?oxjN2;jTRlpCh)li9rw&5D%;WyLA@5rgd^x6?AbAr`46 zMeZ>g>!p(f9q6+4a_meWX7dZrUj4u7d;U@4{f}RmbqB&FB=RZ5Z~EGdOj@~Sc88zY z{xKDBF+ioh{WE^h7U}4K=t>TX(*|Gtvk`6#uP$mK&(^)ks#FN+G*`z&sd94O7Q!%o zR%-SD?QP&h>#KIATlfO!7h(u!hj9QlP981|HlwDbXZ7U!IW;J@?-Lfi>#DBm8~^0X zzIr(cK(zrRYOUP~IUhu@-|Pzs-5E`?kQ8sEkg@y}3Y z%We7&&{V{+!L|Qk9{GQCm4AD>w?Q%IB#ToXLS7#YG}KP>HBPWL+>8r~N?x0>Dv@%u!~)MZmJ+ZsePDi=6@$tUm@I zOJx&QvU4-%bi*Lc3mjOtD{l$Jb+DXk{)9$@F} zIBlQ&O1qWDZt2}g2wGR1jBJRrJw7*y5M*0jF?uTzWAc~PuXLFO!RUJ=OE=$7M^ zRXhE#BOSwB56LW$FoG9fo7iCHgSRYn>@h)%*%uAd4mQB+V_^c7iF9XeiQVBwtU2pk zzBMic@ED{Jk7!V1r<*1GPe$|a3GgopUeFzgA17X&Ff~9SuBpk%-kGSkdjszo>gY4n zNVAHL5G`V^f$)rc2hz|Z(|8>{@aA;cXeKhdiy*Q#1h~;w`K;9~i1)Q2HX|ww&RE=eBhUihM*z}&HvQ;z2%Zv!gE_Lv2PSj!bfCsL>th*lDx6L41_jBg12C^SF z(41W+t+9w5cui5hOR(^@mJDSGxJhNsgyJHL09CGh3{f`9X=a4}tPGYmg#3-ndizM4 zcJ!p1w=J2gXU|(IQ***jcXpo8VJKK&yGfTUH-Ji4i}wsGMpyX%PHexdsGmGc=?kt1 zvMwqa1HEw5IOeOfX>KZ#U!!GyesFHAIWVQzjmm&#%%xAU%P-m6+RQ)e)8c$GT+X}h z6{X_)Q`8f&9oNhfogsdXwYH@n4_256lmC*}b-Y&9;7vP?DB;L{HbJ9gsHpgGKuMfu$UyoCzz|eK0w{ zkN|l`&{D$ov|sh|oocbO4Oiox3-+8P{e1RjsS1W+0XKWzM zTKBT}sZCaTtvxj>zRR&v{C2ScsEoBn!!isTR4)JTSQKb&YEqiMmtFX5s~&)gK(`m4 zjyLycJ|>O@_-wU*``VzG5);)Ol`>e#PAt+yKsnh~Ow`1~)Xd`pbH!>`Q{ObCA>#V)U@;nzgbdOh^IjG(jjjw>6xGhwQViX zLI?*oi9txe(Lb+)sSO=zU2f8EYKF%Gpo7$VadYLCAx8xRQNyl5Pb+IDCb znU?Cw`AEp_#n&r?M^vIJ(@#Tek1Cpbbe4J}$L$f_jZHmS4IxuagFSz=;98m3ZcQe_ zYcjn~a`o)gB)&auT}6T&8#WmjXnYR{ZH!;OxAs~EPlBufp35XSd~VoUH%IB@QT7>J zsE>owSzjyW9J_oXer`+DM0fJy8LyE!0XlEe@e&fSJh3&iN~P}LhUj}e1fDhMSYvjwk}qg*QXAhJ`g@Nio)NRK5kph@Y#Vt)P2lMDJENK z0)&D2Ga1{%-Cyv}7+*isxm=}g$;JtaJ1S6#8G!B#Em+LPEv*2DcD zEy6c3l${jiLUH5lGEVlXd)m=QhMa<78bS6Y`CMMB7W|%u@A`uPU7)wZQW4X4OL!m; zcQRxBgBEB$g2K@;4yd$lb0$VnhX`A0V=o)d*o_;i2Z?$&b1k)PL$3tz=s~5!&;NJg zm4^Mv$i)H^?FuYtcB1xP&z{(a-P}92u`3yVHU}9BsO|i7B3tg*Ik3e&TR7*n6+1EF z>V_Kyi7k~G39qX8?pZAWomi&lsK4vSS8Th*`vm@_iFb8rSysi3P545fJYPh2lltUk z3Mjv(n46aP>b(49ZCi^dY;1_#C8JyAW8gz;Nk5wzfj?{8V$y#DaQ{Ip?j*y`%FF`T z_({}Bn@ndd^_Hd6t@u8EdZJ1A*=6@)7*uJI%(tVKH8$<=p#>WU4hq2UzZDEVS6mD^ zvG7{`R{uL@L2yCHCAr%%XZ}}06i>IPdd_PtO?+l=9L9sGXEGh-_3)2kfyfDjrZ zqm#$n(MHgQg+E0G7h~U+Msm+MQkNPovIe+Ra3;!^JhN}NZOSu63i;vEfbW3~ZX+D| z2A1b22s9E`v!m*ziS5Y1Qh&*H6fJI#0#=ao=A8DterGj2n%OzfBA-sSX4l<~vk=&q zC<)JlGwpE`ZF-$P4*hdEoti)>$sT)ry0a@} zCnMpDNkkd-gN3x^ls3jbV{sP&K0lPm&_G3My=kX<&DIi^P(NE`BwICd>Ow5dtOMgm zjHVRd4|9RGZ&PDA=Qtum+0jVu?zpvncNxFauJ&=?61!}ZtOjDb-K;aG0L2hJA`}aH z=5k`&Uy8oRWL7o|(~*~5lOR?til(@UmH4QXqewd zihD}_!{N*S`>D?MoVd&!G<*5WAgFAnX3Zc-lt+3-3pGok-qc2(Q6ihssq?Q93=7q| z9yHMYJtOSe4uSiT%{A{Q_w2ie;Q%Bd`hI3{_rWNhsCYj$TR*lwQ(G_AtBkMJa51{n zj`NwwMLD*};%?Z&;0x5Ug;&axe#q_3gN+C*wxzaU0Q)vv{VsEN_o?`sox~G?I-1ZW z#&HNcQG?=PWQ{!szN;~*=BM0A3%-P8THATBGOJbm+B{eo>MqWn2A$cS7Ca1toLyhj zgW+5@ETmU+GL}YSGG7O4b=goFH9u-|;c67NCvo9id(D9dP(WRJf)yNv!(sFTcsNoRPTug+WMBQf{9#D0HrJz2voPC)`4|jxmx0Lvuwkk z?z(nMc*+O}?=vEi1?*P*C$t+OL*!1h;uis(@xb&S&qwugAfYGV#L+)?Ks)`t-}t+IR5c}jvxF>uKRBvV`?J4ciU)%&FUgRQ9GZLp22;$C*Hpa4{y@0D!ww#&E6BZ zgl7ZXRF!9yYvTZf+tLs^-od8#XfQY$w366jcfc7A8ivOzSR%8zWH*sbo&Qw!MZf-U z#VMP!)#q5$}8k)cX*kQB?fcY>Z7W|tIvn-ce-QOZA9&fmM?d^4{Tln^Jve`(K z+lZz7_oxV+dwj*#e*3Bk!5F^9CL@73X{&3f%Xf}0RyssVVJ;p06xU)EaGtg#Jgg%a zweN1TZKMS&1&RVn-;hS@Sy^SpDkFn87iNd;`EjI+OZq>UIy1)?>BWV*?EL&O++qdmyCdp_cy&Oe1!V^3p+Jl{m4AFdh@jsgzt-8LIJW$iFIecZMHpZbr*i3qs z9|}wzloSihvhHQ28Eg=@=4#ShlI#(R=I8MinM<{JXXJ0=jf9&QT2<*$Kat|Ci?R)s zB^iFsFq%@=H)5qQ$S9<^8N(2zBxWwz!O-1;`V%?=cA2&xSR|?JR^=lNz#RZWU}EB|Xy(w?tEJal5ezoC!%{ zV=OFV!jQOyB~7O!Tt?fZgH+B>d^|4sqLFX6K$|wz&*2-UCe^BIjszEU5v{^`UsFm4 zKJ|w`{_s~do1@|E>ReCEr-%~A_UlNx$5aUs)bC36d`s~1(EL1DLIOmxf_r=@Ga8|i z`$P#@yPRKDDRq)v5hu7--Pp3C?!EMyemZ)=foby%nYCCs)&QtkNecmf%v9iR?uG-8 z1{IRVqGf|K2O<}zFJ*}Y-jx1Huf<*;ib^VZ#U#4f?`eS7!pqH%gvG|RdQl#9@`bSG z$1&!=|I}8u2+qv%2PQ{EEe<@n9<&wdtkgrwMFMHu$KqD=Nm8-ObhCw7#qok33rS#B z!g;P~CSuEO<-1s+J@;~^#dLE3NsYS;Z*FU`oJRMx4A&}+gger+kNc{OB>1?-AO9GV z1GTlm=8r)o%B3X*71mJ}3#gwhP!3AH+`Hp}_cD+2;?MF`GUhVdyb(e5xRTOQ4(&7MHYNMZSkRGM?N6X#jIxYG}UEs1V zJ^Jr2{7ah`Z58)0k+fZa(=)&X!C{PX`MAD?P8Ej%?t3u(SxT>hbqCwYSpm)tbc4-6 z-%55yL>i$vOQLZHyBAFak_eJ4N7JwOQ7m|NotMnrEdV2L0;c2DCjm+@i$_)Zk%fl15y$q~4P}M0_k|a;1kG?`4-XI2 z#EMhT@Bk1xwP3g?a$x1_89>geUvM7BFU19jO(+Ye`##N}g~eT#qe1%{hMiUxoKjuA zBBwr0^iihzo)$`<7rF--&(t@wFTxB0t{Z9+3tlpiQ?UHgAo!P6z556 z$W@TiaI?`9)GbCL$q$M9q6ZDfHiXz_S?}eit83e%M=xL4WQ(-|S>gK*S*6!`wY5|Q zlp6Ac*Kksx9`t5(mt@zS&}Lh|VoyWyxxgvo)#!!MkJ~MdRY9`#bE^BD)b27)%p%V} z{B!%uMx$;E{!71z7UjBzvdF83cxN87Gm1%Qm)*^Ni#yOZFUfs30jyM%X2fTMafFhd=Saxx}RN^W5;yV3&vS1%~ zP5EXBNL1cM!HEY-tHXlkSUA3=3CnuJT9c2>QcF;T?3PIbJWMvQ?JozS|5q6-YSydy zsA_*(BAkI8!~+`@Mrw&Y2bu@JnNg@JIu^JgdDyf9oT_IaXvq4I1)QMmBFf$EMABFp zqeTWX1wq^SI6KjM^OG{yBwTN3yF+S?gMVnxLou*9~P&`DX6nm z8NxiK6c9?3(!$W~ZFO=v-YxGv+58F>;r8|~Y;udtQhfGq= zd#I?JPx%gPal~0zVvVWT|8m>~6g$}xAN{)G3VB63jneCd9H6ZR>6~F} z!}4#?rcn-C!b2I@?$WtYZu0H; z>dx9X6glitPqCmCY0%J5eXB`3l={gs(<(eL5gZx-Qu*aa6_I*O4NEq_I=}=YI-RSh zJSbt}PK5ZWHbN|s!bCA+>J38!^wm|fVdcnY1*q#p;C)+!%0&CUNCDM=Yf`+t=JjD8 zf+Q$lEsE|69p2ct$b3?_nmxzJEJ@WQyT1oClnLSI;^qxgORJ<)xqXXKizpMPs1dap zqtQwpA2cuk5z1{qD^DO|_ zR{SZk*!*%vn%_|ZfHO}o-8|u>6h8kwMyXc4c5&QI^p+jCY*hfC28irbqCvt+ zWBH|n!_)jHOdh+p#XaVPvaw`FQ@uDuz95{n_?NS@Vpi;>MXU! zO)m+WH1{A@lP@P7;Z>l4cn~!-mP&NZFP{4DxeV2gWKVMZ*!i!(OS5sQYBU1tdl!Rj zhp7Hhg87j@Z$5r|O%2-*bQ6HSW*gB0H$`1DMH)k^+fHG16*1~rz*l0XEhef5f^=x+ zW@>O=SV-sgT##fWnnQ}z0xpHaKNaaMjW{8AA~&Kf(!H|_{`SHVr!B(sIR@6?qV7WkqWSGVymg4qhhu*_-3&!hp`{HS4#$ z9a@WjdH32+=UYdQdd5gL80X0;#&3#OSo>hpzQlFMRj;J@Z#Z}OJfY0tNHR@hed&wK zo+|79&^@+Zt{u|%PLe6Z{vIto>%_csK7J8-3E}$9nfcp{G>i#ur4(HE|7KAYYgEYm zNNR0PO%~6Z8yZ77-Cwuam(reej}|lRAOQ9b{}#8*dwn%5EUY`->=Q7cQ;j2{SJ1r| z(clJZ*Yz0)yvrJLwKMJ_b+=*ISE7_kqG<&%>ue6i57*AtGk3zU5i1@3nHj>$%?|1Z zo||Kr7Cr>-D13kF@Y<~pZ?D^}yJq9bzkj@Q==2aXT88YwG9eWPs}ivAtdJ9Az%DDU zrsG{!fQHK%AH5=}`1VRi@HQ0CMJfC^lVF(nd$qU)5iVI(Ohni6i7-=PDrMQ<{pK`z zl{ibM6c*5#H~$5oB`=H+(`n*jx9TXgxVMYqRlP7~lDbOeVRY&FisGkTBW(oSEo`?@;IPKnCcboE^a5vIyR3L zqrYzVcp^6_YB*?T*UyKC)&mR%_-K}-e5{Wp{Pf{(ULG|YGggu6o%QfTi$&iPIU$Qu zDq9tjWZ14O&nHJqyRrxyt3D0h$eoV`YBbNnM3}f~J|WR$+Si(%Es#X{H*iZ<*2v#l znff5j^85z>1Cty1DLNm<2NzVD;Wn`N1*q4*BRoG|JKy6cTON#df{^BWhK?vtOu<91 zO05A=DoXDGAK+L32K5+Vf+bVTE$LAPD+~SHr>>L<7yoP5-m1?W`|oD@FBbdHkF#C7 zYF1VpkiP_6yY^?651=3M-ymjE>rkZu#Z0VewD?)Za`ewd`=dkLxxsfVI4p&NxP&>0EQp-X^|@t$7!{ z1aFo<9wcoR-dnv4-}J9V2le-ybjM{a$GB&wu-$?%S!dW}OB2{fG^3uM=+m&kL^;Knct8`L{`|f(C&B+`p+1mbBuKdZXoGhp+O3bwi zdWc<-hy6^`iVQ40bn?%hP2)N!%grDsTj|35x6>w5n3)fJ#+W}q1yH7c;&8med*zSjyJ&#w9{CBZ53NZ420iOE6=u5=s8Pczlp zjHVU#ySRcPsVFNaL0CB8X0}>7g-Bf`AYl6nvtX3K(t+?y=M*MC>3_(mm151Z=EYGdCz?CVue_|%E3Os#4SZH zRPqfJ=8Ow{8`*dmRL|d^*tV*WBAbna-3rNZ$>uFh=6AKMFyT;Vl{v?&`z1X@BO2tN z;rB;x^&j!M<~g9ST(0xnTz-u%W%-WdM(oyDD`o80uS-L0AAD?r6-VKzTdA3QDM@wd zk)_R3dryqnZ;4nP;cw|-K(A8xM;6ty?aR_bWuR<7vpZZadAc5@IWjtdpp43Pf=(ucz*@ zgWWF6d6EUbd%;jA#PddxgX4thZ-&wyngb*&kFV*Okh39dM}ppVePhVu(^}ildoh}K z224I=2_2_8UPliaim64!Vt@Qf-ab$zbCtL|6amV!`sD|Yr1O_MYLoe)tYykdX+W{l zw)2qE!Eiz9hj$7f@~NqhnEk`0)q?zKx5>`*F2+)$gMrrE7eIlta&lm1T1?(HT`%C2 zNL)zmCb+r8(Bb3i0;-R6ZT1DL_;X1fttu6IM)rY%D$HgNUcCwC{IErN=k$BfLsZ2} z;c(~Yc&f@WWG=ypSF+luxQ1)0@k&NM;MVBQtWAtAwB(1-!NS>OOJn7}Yp;T3Z!wd) zmfxj_t)Ord3*q|gP5^~;wAkG0y zd*3z#vY;(r%(G+*crJ62qDce@{-!U~VmB{?U57@@l+@X?s->z?vK-agfj2qy!Er@~8TIWjh?Oq9YY*Y- zS%jJAz@v>Pk=qG)rPTM-HWSWor(6wxgih}iAr*A z%Md?-f~&q=7^_*@!OUoi#(4NRfRSg0V;urt?b~EGjGgfynF&j_b(gF?T+LO2@QOl% zs z@*3Ke5&mmczOv8$2BvVD&k5s4_2fJ_h_wB=`Uvb5E6*}B%PPG6yLs+IB+E<>9x1o) zbB%d!cbOCw6YWtw4+t^CVUzA^!8&K69exmq{t=M>#nfxOpMWUJ&e2`|!r9rEy{N^d z7q1?e;=P|9fp0VO%nX-Mb*JsSsCH({yVfD26w(eBwg)rfk87MfOB;hocBWj0X-JE0Mph@rQGolo|Ihn6;KCq`z z6R*RC8}PrRH_z{~{@rVLKxi5~^HI#`>-b^QJU`wd?N7%Wre96K`^b6x$9L|SST~b8 zt}?uq%n`|~=~ED4#BVW=at4^T0$Ncpa`J_?gCx-l=EO(atI3EHfkZ z-`5OX%oI7T(e?aca5lXoJW=>+Vhd)b@H44@YbWcuW~)~z6AEc_T9Hi@c&r)vJyi8v zh?*-UBu3A2hp%#OX{O%%jpKF+e=FV9t3~y}OF;ScXgRbd6&UhP4+y!>FXvd07$G80Q3HDA4w9m@m=O35l| zSrwO$STa*DT<+Qgf_WZ?duys?&bdd=-c$S18&H_}(FHGEdw5+=e`6P78C8Rh^!*qEtGE_xsW~l6^{OW4J zoEj~oe{_$fz&!`&`#zUThhp*5zCSbbDiHQkZ66r=bCv%IO!qeS|vI((!B1 zNJ@$sIibnTo~F4mWruuC@7kb{dF07ug?6i(^WDrlb7QyjVS=qRuPmFXB#kJyrQIfw zCN8t69rhWDF-S#sO7#zYg@q)!Y0`JRRUg)gY|3x*58g?CVP4<>+e?Nk26_5SfO;Bn1z)uJ(=p-wE{zAXQ_|C1$Zy8lCM zjLz>kA)iR7xD>$McP~;*_X;o7x*oRv_Adi@gI`gNwekct=c?Sn=5XM4EF6wu%Ot5e zh~kzSzVz*&fhg-0VOse2GEt6wk^8})zR8kUMHY^3IK+F~i)g3Wy-|Mynk_T|Y3 zl`97%Vd$&bQj%v3u&PEP4f1P@*VbJ4se!rfZZXj3UG^M&zdaxHaHo3mM(&2OOq5JK zW}fQ#H7JM#2&m6uH2w1+;L_;>RubMF%eD~vJ*69c`#NS;l1Bn{_|i)s*pwIZ#U)*%%k}SN}qHk4{SKuzaQ0|z1nYQ#y>9k zVYBfA^DE0y9U}PZ-+K=E<=$aL*V3^C%ZuD=DXq?`cZsTg$B6gqSrmge*thnI)y-|k z_7J=}Mvhqi;jy-dsiQB}I8>BjB3sbio(RLT_3<)M!dc~s?9H!W+{-Oq4K`Dq?-IeM zGxMCyLlT;vlcvDiMc@0Pt2dgq0yL6m(NzWAyo91;C13=t|3y_0UfCbs z0N#7i4IwA#=fYUpAhY%~c!rtd?ZuVI4;Mh9xBCoi!p~$lRIQ>8u;n?z7>XhdA}@TP zf1zL{eN`69gE#9!N91AM6=MkEz9I7KO=#2LlK}|sq2(5GSymfv?vH`xo z$Q~q`Uy|~LOHyzjcCd2(rFyj~eJ>$b9~6iv;!%bRAgn8vM!W9XE5_+LN@>6;*&kVd z%(&)Jx?D}FKI)Fv>8yxos1>DKiA(EMjVz6Q0VF5bI)K+%$v96rV*skOWdN3^Y`f4p zKYE~)cM>kZIA)M$ev*G2O@NIQ@M0}LRQ%$W7>)jC` z{NBgmYKcNWjeZLI3KMr6oveQj@cMY?WIl4zQEmWkH5aHf9D~{|%%{&i^<`I~3c3;L z3x(HJ^b1(Cb4RU@DW#=eY2INKrP;?&OOc^T7BKE^gAmcKw{-V$IbKqN(@Ocb9cI!) z63LtB8&?9!y1cr#$Ilv->~NNg=5%}~!ikUU0DWkDl4957%Ix(Y{M#olC#zknN5;<% zVn-j{Pj9$rf9$@3L9u;gffpI;NY;kPVAJeLfi2x&@b# z@TJk+1!~rn;Vpk78Xyyj~`dJWNw6-m7Nw92(X|QwKw6+WuYpB9clhr?3<4L}RdKMg1%Q z09^0!=Vq#PCZ}L8plChDvQb0&eV57vNa0{VxocTGV7Hb7hw#(Jwzw!n9j(eY^BvAu znPiDhSc~hx(<9!%WHNOie4r$qOK)sEDIQ8Nd`d4Y+f^_qT1~Xgxo0{H*V>=`4^gI@ zPP(R5vbkyh)2UB;>gx0bb`@QQFAv@N9lh(WA3;8m;GJ~1?p{Pf#B!b*T?;lzHT~e| zInRbS+iQv20!svQuO0gg1&smRu%2)JXLPW?*+P2Y`13J_7ft5lnQ0$_B_9PNIXZmd znI3)U(`xDDLQ-`9$!wP$>*MK(hC1F9Sc}yeuMBkO==?6T<#%eP-&1?tsQ8>=$O6+&nwzVpvy~QeK5n&mY^o;^tfHu+{dv~j zz6pNSm%l&WV^4p2U_X8G)nD~1Lzwh|lCDc#CFqqoT57W8V8mtmX5-4DsCj4Ngixhb z_fK-}C!4j0F_~TnZD7V*{k0@{DDF7Wza0K%a+$YvsakgzM)1s(_XcA=lNkVBWp%>7#R|hqg?P~HgBfgLxa`*tUt zhr4_V*=DEH6MrKC2GBLpSH~sBVJrJS41}M#5?OOc{wZsjW0|>PFA%oK!$h?McHRb( zylH$fKmbrOHe|2#y?3rS;b;ERWTAu2@zJ zpmmbI7)|~#xFiO!Qe)RkVc*IQ$RO5vLfmJyEK|nJ(f`oa07Ub))%9x;BB2e>ov83o zrFZUy(^1Vo2o)%Q~lo|t1!e}oN82rt5*jD$U@ z*d#lnsyY6ju*lJ^H1~)V>cKb0k$I#Ha;92W*4_Zos1Y>>CLJ-f5J)5`=CzNld|ok+ z_$Zw{zjJg5ZPrlvduF)&ua27bu+F58FQ@ld0G-S|I-Nuqd)+IesuJTgM*2{vrQv~- zIl<|5#Dbh?kHV=xw4&S?cuGqxAcN4E@hTq-i$s4-tXjCXk^z+!pHM$=F|rpR$lQ9^ z%ln5>J>Y2#X$FfB4=z$zhgS6>=oWo}=0(GQOFHwly_#hkHaNAB%hw(b=Gsb=%*!Xz zgFd;VncexY3Id&KT5&42=uM0Eu<0) zgU>H{09erTHy+B;sPCt}ehVM)PYq1g^ichFUeNGql?ow5^7n?=hPB-(%GY{12%%X@ ztpAI>Ms)JBt*UhyVL1r}viq*jIzM;`9QsV@kFQH}V*xe`_&Z^h{%irnCj{JH!LH zhN9JZLWbx1FsVfkJPef?M8iy84u;zm&X2HSkWAY`+b^GyjJ*McRpDYbQTDs=J!_^L znI+}Tmt&@vC8n=r>#2myXq-<*b8z|hH=p72_kk|Uv)dt{FgrUt1gid{6!iBg(!YQ{ zcPPKyx!#_W`rQTfi(jWvFet+n{P8!{x#LOq2=abZ;vt)yHZyPShAFj}6Av)&wza57 z1|1mbP9&CVpueYH6eZM)z>5n`cCt}Z!?@=fX1w}1u=mJgdOYlqvkCg0vwgWtRr!|m^2klBN&W+d* zDJ;%%@meYG+7gJKGlaPtSB}37Mo3&MU-I16|AzW@!4(*!Z<~qYJU(6i$pbRBckCfR z$RZS?Dqk%xz*dUWXFjs=W7|xk(U!z7sjDL{o(;mwWZ|Q;(}BstQZGbi)0MS{kDXkF zcP@>aPv+l|RLcaXG%XA8Ak&fDko67QomErwe+8A@`u=sAL+#*pl8=-&Nb@&>y1b*M z^R;S@KlktM8PqCm(g(W_+8W$bEN*Ie7j>cualFg}QR0H8*UG~KzO1bga`_|zHW0n| z$Uz9$;=P%~)e)Lnuig{em3}1M-{slTBa+8P)Zq1;`T5kUz@tq~>u#gEdR9kKUr^PO zfdb3V$7BaYg#Cp^t0nJzwwehK(!nH3WAG8`r^5Be<#?_*x z`dM>s!r-QCwTpXCOdNFD5@n|`VlzP^VtP&&CN0!{c%yT|iDUQOehWtfG6LUClxCzK zDmPu?YMXzEGdm&wG>nlzw07c9|AcWLz@+aS2px^$_W>_e%l7HNIdIZ0U}wo${!t!{ zIc&9iu6akXWAdokuFyI{J@a{-`j-r|xv<_Axdg~W5l5@(RWu_79Tr9os>(=#B<<{B zdNst)m)9)qk;ShC)E-3Wi^k1nH@JE_FjA9WOUmLY?NCO(B}fS^cX?0t4^sH7y56jW zwNhP)V__@26mSeEzj@jqU&iT=4F_n8QPa{J%jTa3!aW=3$LO0^&iaJ~hON7;@P1JA z#_|u?H_d9(W4L%}Q8X~L`?3QpK50oj6mY@1cyMcD&}C=Rs?J0uzfr%UHO_8SZ;YxO zb@_5{dhXAYT@+bZX;-w|<^3;5g-3$*c%{Tu=HGaXpWfR2Kp}aXwbWVqMZV$Q8HF}S z+p#CIg9Dg-BOhEgg7$U{zO@+V9FraXMxtrE;?5z~P-UeoPO#5KjTB4TBLiYpNd014~e2*PXC85Rh-0pjDdq4=hbqH{Et( zV8%E-xcoYz$|lA6y@K#VAvXW?aHO7gmLw?fzi!M!iW+|6XdY#{l%Db&{KJM59mA z^xgp9`9GlnMsw8pW1}=^n49@mg15o1UVzrJT=WeUqMPs{-6l-q75!IS=o~jHNkm#` z&aj&p)iWV|rEn+ts~ft5oaEX+A^IpdJ^cPFnX>R2aqq@Cgz$^F#`%6Jln8OkvU zBmbf7N3hBo9lg|}pM}$qI-5fqE*x$wr+9^h9byz%f(jt7WTu?d+V0jLJ&&5_yKjSx z*Ak;6dfUI;akdW)Om*} zOD@*mM^jd}^I7{NZ){r&8Cs(}-q}A=D#?lz$|Ap9;fm@_aOYPST7-;z znYwF+m^fka{HIb%m21veKeDq4s0W-?LAx~UGww^-ux0y2GAeQDesQ(>97{P`qif&# z+kY!koVHmzehYQhoTGi~6X>`jdIEwDp5GA?B%2fDA-Rm8_DH_Am*D;2vYKE!T^L!h ztvg8kr{N!^I^k|6Pn%M69~zai=CC1{ZM6Jih7H?y!+~CAyj1%Wt2**(C#6Q+{<262 zkeCCdEakgr2MkqvH-r^ECDthwbH*C?Q7@&Hl>QFL|CEo7FPT@=ZqPiVKza87M-oPU z+;W4WT-xoMm<3t@7U_?Pxr^1MTc%oE1?~gd@QS~KT7psOt_>WE!@? zDq~|bI+fvq?(2^uH#S>+D zX({Pd&AGXKrxo=hH@^qnd`9_1xwVni_x#^CaQ>@ya^tVVN%~mfrIWAKjuxa=jvpUe z1B6tu&$io{D{X|Uxs{=D+Fx=tk9^}&X77hOZaYxFinfngGjZWhQ}FqqS%B;eA^tzS zy$4X!Ti5m-8|YD~N>Ls({4)Rx4DlPqD}27Bdu{jtFaI~W zzyTu%Yu^FPgrbk(`khl-di>K9f?xc`fP!i0+5WS`C2Ih;q3Ezd2$}NuV|o|WaC85I z$ej~2Bz@%9h$lkt#s4Te349k`&Id1XhmLMLdZF1aC8b?R#oghKy3Lu>W<}NG$whKL z)}E4^N2Xo?%DIw5_A$_!Wye;h{d3!A|NO!a@vpv4TL90)3Z?5hK6`NfEa;fM#@BZ{ z-Uy8>x!(zL1q}D32~Q0vPWg$ffG?ZD;*B#dfr`U{5;o6rSxPb>#?7{~pKO+oeH?oA z3qnv*6gQq4+RRn{pnZ12eF?dFMSATkzj*LCZ{Yk+i2(0!k)X=*Pr{%Pp2OxQ-`K;VvZ?SVgQX-hdaz$JA9VDv$L@1vXGJaI8V(od93Za=$9gF z(?^8TGj$NX@)X}E9r=h|iYjpg^*kdfFi6ZHAicees1j7&gNN1Qg!g`o8l-k4Zjk8{ zhJkO2W{VU(^NgYym!WST#U(PvDEjRUO_`bARgcTojToPbe~`o+eW>#L^MhlB1w9MI zrP|YPM_%_24lJs^Qwn59Y4sZco{6Q?if=f5@g~_H%R2O__rGrAKj3lv@Qug;q4L5H zLX&9@ch(=Ac{h8It4_iBjr+buH+5N`_}#SWlI@AnOlzIhWj*TRO?s_Z<*epAGK z^>_k$LW^h4Jp96IJ{za%vDPw`BYyElVHK-rH%OQ`b5+-_(6PYXVCFvc@E*L>n@@Lu zf51DEpXkM=uVqx79_1rf+|-y@4WA>@%mMmR%Jz;MDmU^nouo#*FOO=%qHqThTmVKZg1>Q`Zt6kBGd2;tjA+zk*#H^alX4k+6kK=(x>$O6w&3t>#3WL(W15Vue)BDr% zOF!qITGCYt9DUU=O!!gw{U4F|zrHN++`gtwDg6zUsuI9`F^F?uoX0;B66iP}xFQ=! zd+rm6BMakU6XNH(bzo=&sUS1x7@x@j435Pv88zPdsm$q`;Lt&uBoY_9uxGmwNE(2cD{iR^fH5L<>!Y!tu2s*h}^*QQt@>aVkmWg zA)-1j5skku6Txq!rN@o@)>>ow#vTJhVP$K#C zH4{^o7vA=QMHouFV74iZ)&HL~2e;V508#s}ZZmqaF*k4l!WEsV&_Wkiz zCqWEl|NdD01i`d>X4SxZ*p#e7AZu|R@p$uWt2w6@A~v%u6k8AAk)`DyV^cPSJ_O~A zaL=|>ee>x5Z7^_B2dsYU&4QSkd8m`sHf>BD5A%Tn=#xtoJ zB(ft9Q?ihtXs`K_cW2kWx4-{y!RLFw%md!UmPQ)&N@D-E_Dt1*8)l=Q0qop*i&dXr z3fWv53-bv{>n)!2H#$i8e7AA`7F4ddlwUb6bJX_jFO_o29^}uD zz*$b8IdkR{M{$;L^)BXfafsc`u5`N!Ke}j6U>{<0x$E02{~bf_ivg1|SD#c&IZ2mU z2hHWZF9Zq6OzAqEHQ#!TOy0sGVDUFU`Y!A9^v}!MsSmpt*(n}OZSi{I+2Om5 z4Pfx9>yQ@PZSCxUgN6OtS`qNPUjEwsx#EuQjsJ?Ce}9>OuQYUQZcq9=cLZQ8W}dxU zTX}xx!nufSEWcAUDWY$06kdWHVoAq3neOw4j$_Q;)~G}HjvP?o9S;LO!}uEN?;WX` zHU8CPVI65b!a*jqrd$2yH02y$Bh7{9KT9l5(1^s%h%(eTB* zChcJVxW?L!;~-zWpqqwn~`&t)RC)!t`utsRo=6celC z@!++}WY^gXC(hD@es4Js3((t;2tV#A;8)(zFY67*1IXj@ z?Ok@7r%&5bN(12;KfIK-bcDNiAkRVHN4Qvw{f}DIKhPoG)rG#pNh;SEQJQx?c++p5 zX?G!vO#5Y4Xj7MR#%w~uRhn~&tUqz^GB`lOb$l`_Q8daqhVRu(n?3V16u;4fc1};` zG)d&?+BI8p*|0lZy2czkc5eh6jq21f(L-g17;V-HLRR7YY>8=x8NXASX6Lh!0jC>8 zE!2X5k9yC?TlCJfbdaIBm*2dIS*=+D!b2}2puqej zCXXU5s252881I*^nw}WBdU{@)!N`#F#>K8vQA*Qf3yVr{i2t!!rP}8GJU|x8;F6FkN)_&_CryW80mk+w+Zw2gu?!a9!pedk4#D6;EZbPIks^-Xk_W)Oc< z31P4uJNi(cOD`@mrRj$R3NJU|1&zRZ@(?yhJ?9tD#M9foHPdQ)eyGZ9rHKy%#JBBw zuvFC5*879N|AXE2VCSsD&g`ol!m6%76~Cmei*5?dK9PL#H8PSVf%%Ru=rx@rSn5d^ zq?s$haRs-f5%s=A+dc_TVZMss@mmE#hfw4!zKwRaXjInC6?8`;+!G5W2tCpd@qdL8?uz_{idw1Z1KD~47roP2kSh>HrK>qdo^wp> z)>_-5;-k(9A-r)~eZ$G(B~;T*fKT%K+F2wBC|X|%l0@~j#;3XrG__uc9an_0%+F%T z^U^FzoW_+Sd2RNc?_1()81t9-oo*<}Pxf0g)64ws-75ro!PoXX4%P4X`L~;BIDXHs zpjv2%dipg1O&(#Gz%nQUTS+?MH3q{_YQi9d`(jtyKrV3uYqGzYg)S(1uQz|AS$h|396NCot{Fg< zt#D6Q9*IQd9fte$Y$xMab_!KeL`+92=abrqfF`4#GKwH zSuVS##=6y+OoIkrLU2i`4-+{QWOS{$KfP=96!_K&wYz2N135>*zaM%z`Fw}0+)*(|`c#H&rd1L|-0}N0sGs zSRs=wX78!; z{5K2G1eJiP#?-Znkey!Jp004_=5&zUJi^AqRAtUYmUz%d1p2w@8nsb^t=~dPJj4

    0?2rd)HYCzabc>AQC9A4dKEtJD7=sarD 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�W>nCnR`5GfzDub zli8&_5|B^igm5i$uFV4uaMCy)ISb0xbk~FlFF7-UT3U5X#w8%Dc}@0x*y17�KZ$ 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

    klLz5Hx-SedS1bRWR^dra{vq6$26{U@QMY$@~I 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 Ihs)Lf0SyF$H~;_u literal 0 HcmV?d00001 From e06e341468202eebd928dee6a222ea118ef06331 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Mon, 28 Feb 2022 07:14:55 -0800 Subject: [PATCH 081/695] fix: explicitly set root as current directory to fix ignore files --- .github/workflows/deploy.yaml | 3 ++- .hugo_build.lock | 0 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 .hugo_build.lock diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index 933261f9..8d4b137c 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -17,6 +17,7 @@ jobs: index: true input: content output: static + root: . - name: Setup Hugo uses: peaceiris/actions-hugo@v2 @@ -33,4 +34,4 @@ jobs: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: ./public publish_branch: master # deploying branch - cname: quartz.jzhao.xyz \ No newline at end of file + cname: quartz.jzhao.xyz diff --git a/.hugo_build.lock b/.hugo_build.lock new file mode 100644 index 00000000..e69de29b From 0ee0855e1c1843a86a7bcd58aee520784c165dba Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Mon, 28 Feb 2022 07:30:59 -0800 Subject: [PATCH 082/695] bump hugo-obsidian to support root --- .github/workflows/deploy.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index 8d4b137c..a492b9b0 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -12,7 +12,7 @@ jobs: - uses: actions/checkout@v2 - name: Build Link Index - uses: jackyzha0/hugo-obsidian@v2.8 + uses: jackyzha0/hugo-obsidian@v2.9 with: index: true input: content From 5234fae080f1d3dca4f105438e3e0151f12ca61c Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Mon, 28 Feb 2022 08:24:29 -0800 Subject: [PATCH 083/695] fix backlinks not using baseurl --- layouts/partials/backlinks.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/layouts/partials/backlinks.html b/layouts/partials/backlinks.html index 746ebbbc..d2143869 100644 --- a/layouts/partials/backlinks.html +++ b/layouts/partials/backlinks.html @@ -10,7 +10,7 @@ {{$cleanedInbound := apply (apply $inbound "index" "." "source") "replace" "." " " "-"}} {{- range $cleanedInbound | uniq -}}

    {{- end -}} {{else}} From 1313bd9779c638f09b8901f8432d6bc39910bce3 Mon Sep 17 00:00:00 2001 From: Claudio Yanes Date: Fri, 4 Mar 2022 02:07:51 +0000 Subject: [PATCH 084/695] Move css and js to appropriate files Having the CSS and JS in the html template produces pages larger than necessary, as each page need to contain all the js/css. Separating them in appropriate files allow the browser to just download them once and use them for all the pages. This is even more effective with an aggressive cache policy for the js and css, something that can be done without fear thanks to the implemented cache-busting. Also, having then in separate files allows us to use Hugo pipelines for minimizing the code. --- assets/{ => js}/darkmode.js | 0 assets/js/graph.js | 221 ++++++++++++++++++++++++++ assets/js/popover.js | 34 ++++ assets/js/search.js | 247 +++++++++++++++++++++++++++++ assets/{ => styles}/base.scss | 0 assets/{ => styles}/custom.scss | 0 assets/{ => styles}/darkmode.scss | 0 assets/{ => styles}/syntax.scss | 0 layouts/partials/graph.html | 238 ++-------------------------- layouts/partials/head.html | 23 ++- layouts/partials/popover.html | 34 +--- layouts/partials/search.html | 254 +----------------------------- 12 files changed, 529 insertions(+), 522 deletions(-) rename assets/{ => js}/darkmode.js (100%) create mode 100644 assets/js/graph.js create mode 100644 assets/js/popover.js create mode 100644 assets/js/search.js rename assets/{ => styles}/base.scss (100%) rename assets/{ => styles}/custom.scss (100%) rename assets/{ => styles}/darkmode.scss (100%) rename assets/{ => styles}/syntax.scss (100%) diff --git a/assets/darkmode.js b/assets/js/darkmode.js similarity index 100% rename from assets/darkmode.js rename to assets/js/darkmode.js diff --git a/assets/js/graph.js b/assets/js/graph.js new file mode 100644 index 00000000..f4fd4bb6 --- /dev/null +++ b/assets/js/graph.js @@ -0,0 +1,221 @@ +async function drawGraph(url, baseUrl, pathColors, depth, enableDrag, enableLegend, enableZoom) { + const { index, links, content } = await fetchData() + const curPage = url.replace(baseUrl, "") + + const parseIdsFromLinks = (links) => [...(new Set(links.flatMap(link => ([link.source, link.target]))))] + + const neighbours = new Set() + const wl = [curPage || "/", "__SENTINEL"] + if (depth >= 0) { + while (depth >= 0 && wl.length > 0) { + // compute neighbours + const cur = wl.shift() + if (cur === "__SENTINEL") { + depth-- + wl.push("__SENTINEL") + } else { + neighbours.add(cur) + const outgoing = index.links[cur] || [] + const incoming = index.backlinks[cur] || [] + wl.push(...outgoing.map(l => l.target), ...incoming.map(l => l.source)) + } + } + } else { + parseIdsFromLinks(links).forEach(id => neighbours.add(id)) + } + + const data = { + nodes: [...neighbours].map(id => ({id})), + links: links.filter(l => neighbours.has(l.source) && neighbours.has(l.target)), + } + + const color = (d) => { + if (d.id === curPage || (d.id === "/" && curPage === "")) { + return "var(--g-node-active)" + } + + for (const pathColor of pathColors) { + const path = Object.keys(pathColor)[0] + const colour = pathColor[path] + if (d.id.startsWith(path)) { + return colour + } + } + + return "var(--g-node)" + } + + const drag = simulation => { + function dragstarted(event, d) { + if (!event.active) simulation.alphaTarget(1).restart(); + d.fx = d.x; + d.fy = d.y; + } + + function dragged(event,d) { + d.fx = event.x; + d.fy = event.y; + } + + function dragended(event,d) { + if (!event.active) simulation.alphaTarget(0); + d.fx = null; + d.fy = null; + } + + const noop = () => {} + return d3.drag() + .on("start", enableDrag ? dragstarted : noop) + .on("drag", enableDrag ? dragged : noop) + .on("end", enableDrag ? dragended : noop); + } + + const height = 250 + const width = document.getElementById("graph-container").offsetWidth + + const simulation = d3.forceSimulation(data.nodes) + .force("charge", d3.forceManyBody().strength(-30)) + .force("link", d3.forceLink(data.links).id(d => d.id)) + .force("center", d3.forceCenter()); + + const svg = d3.select('#graph-container') + .append('svg') + .attr('width', width) + .attr('height', height) + .attr("viewBox", [-width / 2, -height / 2, width, height]); + + if (enableLegend) { + const legend = [ + {"Current": "var(--g-node-active)"}, + {"Note": "var(--g-node)"}, + ...pathColors + ] + legend.forEach((legendEntry, i) => { + const key = Object.keys(legendEntry)[0] + const colour = legendEntry[key] + svg.append("circle").attr("cx", -width/2 + 20).attr("cy", height/2 - 30 * (i+1)).attr("r", 6).style("fill", colour) + svg.append("text").attr("x", -width/2 + 40).attr("y", height/2 - 30 * (i+1)).text(key).style("font-size", "15px").attr("alignment-baseline","middle") + }) + } + + // draw links between nodes + const link = svg.append("g") + .selectAll("line") + .data(data.links) + .join("line") + .attr("class", "link") + .attr("stroke", "var(--g-link)") + .attr("stroke-width", 2) + .attr("data-source", d => d.source.id) + .attr("data-target", d => d.target.id) + + // svg groups + const graphNode = svg.append("g") + .selectAll("g") + .data(data.nodes) + .enter().append("g") + + // draw individual nodes + const node = graphNode.append("circle") + .attr("class", "node") + .attr("id", (d) => d.id) + .attr("r", (d) => { + const numOut = index.links[d.id]?.length || 0 + const numIn = index.backlinks[d.id]?.length || 0 + return 3 + (numOut + numIn) / 4 + }) + .attr("fill", color) + .style("cursor", "pointer") + .on("click", (_, d) => { + window.location.href = baseUrl + '/' + decodeURI(d.id).replace(/\s+/g, '-') + }) + .on("mouseover", function (_, d) { + d3.selectAll(".node") + .transition() + .duration(100) + .attr("fill", "var(--g-node-inactive)") + + const neighbours = parseIdsFromLinks([...(index.links[d.id] || []), ...(index.backlinks[d.id] || [])]) + const neighbourNodes = d3.selectAll(".node").filter(d => neighbours.includes(d.id)) + const currentId = d.id + const linkNodes = d3.selectAll(".link").filter(d => d.source.id === currentId || d.target.id === currentId) + + // highlight neighbour nodes + neighbourNodes + .transition() + .duration(200) + .attr("fill", color) + + // highlight links + linkNodes + .transition() + .duration(200) + .attr("stroke", "var(--g-link-active)") + + // show text for self + d3.select(this.parentNode) + .select("text") + .raise() + .transition() + .duration(200) + .style("opacity", 1) + }).on("mouseleave", function (_,d) { + d3.selectAll(".node") + .transition() + .duration(200) + .attr("fill", color) + + const currentId = d.id + const linkNodes = d3.selectAll(".link").filter(d => d.source.id === currentId || d.target.id === currentId) + + linkNodes + .transition() + .duration(200) + .attr("stroke", "var(--g-link)") + + d3.select(this.parentNode) + .select("text") + .transition() + .duration(200) + .style("opacity", 0) + }) + .call(drag(simulation)); + + // draw labels + const labels = graphNode.append("text") + .attr("dx", 12) + .attr("dy", ".35em") + .text((d) => content[decodeURI(d.id).replace(/\s+/g, '-')]?.title || "Untitled") + .style("opacity", 0) + .style("pointer-events", "none") + .call(drag(simulation)); + + // set panning + + if (enableZoom) { + svg.call(d3.zoom() + .extent([[0, 0], [width, height]]) + .scaleExtent([0.25, 4]) + .on("zoom", ({transform}) => { + link.attr("transform", transform); + node.attr("transform", transform); + labels.attr("transform", transform); + })); + } + + // progress the simulation + simulation.on("tick", () => { + link + .attr("x1", d => d.source.x) + .attr("y1", d => d.source.y) + .attr("x2", d => d.target.x) + .attr("y2", d => d.target.y) + node + .attr("cx", d => d.x) + .attr("cy", d => d.y) + labels + .attr("x", d => d.x) + .attr("y", d => d.y) + }); + } + \ No newline at end of file diff --git a/assets/js/popover.js b/assets/js/popover.js new file mode 100644 index 00000000..ef7bb615 --- /dev/null +++ b/assets/js/popover.js @@ -0,0 +1,34 @@ +function htmlToElement(html) { + const template = document.createElement('template') + html = html.trim() + template.innerHTML = html + return template.content.firstChild +} + +function initPopover(base) { + const baseUrl = base.replace(window.location.origin, "") // is this useless? + document.addEventListener("DOMContentLoaded", () => { + fetchData().then(({content}) => { + const links = [...document.getElementsByClassName("internal-link")] + links.forEach(li => { + const linkDest = content[li.dataset.src.replace(baseUrl, "")] + // const linkDest = content[li.dataset.src] + if (linkDest) { + const popoverElement = `
    +

    ${linkDest.title}

    +

    ${removeMarkdown(linkDest.content).split(" ", 20).join(" ")}...

    +

    ${new Date(linkDest.lastmodified).toLocaleDateString()}

    +
    ` + const el = htmlToElement(popoverElement) + li.appendChild(el) + li.addEventListener("mouseover", () => { + el.classList.add("visible") + }) + li.addEventListener("mouseout", () => { + el.classList.remove("visible") + }) + } + }) + }) + }) +} diff --git a/assets/js/search.js b/assets/js/search.js new file mode 100644 index 00000000..9733c048 --- /dev/null +++ b/assets/js/search.js @@ -0,0 +1,247 @@ +// code from https://github.com/danestves/markdown-to-text +const removeMarkdown = ( + markdown, + options = { + listUnicodeChar: false, + stripListLeaders: true, + gfm: true, + useImgAltText: false, + preserveLinks: false, + } +) => { + let output = markdown || ""; + output = output.replace(/^(-\s*?|\*\s*?|_\s*?){3,}\s*$/gm, ""); + + try { + if (options.stripListLeaders) { + if (options.listUnicodeChar) + output = output.replace( + /^([\s\t]*)([\*\-\+]|\d+\.)\s+/gm, + options.listUnicodeChar + " $1" + ); + else output = output.replace(/^([\s\t]*)([\*\-\+]|\d+\.)\s+/gm, "$1"); + } + if (options.gfm) { + output = output + .replace(/\n={2,}/g, "\n") + .replace(/~{3}.*\n/g, "") + .replace(/~~/g, "") + .replace(/`{3}.*\n/g, ""); + } + if (options.preserveLinks) { + output = output.replace(/\[(.*?)\][\[\(](.*?)[\]\)]/g, "$1 ($2)") + } + output = output + .replace(/<[^>]*>/g, "") + .replace(/^[=\-]{2,}\s*$/g, "") + .replace(/\[\^.+?\](\: .*?$)?/g, "") + .replace(/\s{0,2}\[.*?\]: .*?$/g, "") + .replace(/\!\[(.*?)\][\[\(].*?[\]\)]/g, options.useImgAltText ? "$1" : "") + .replace(/\[(.*?)\][\[\(].*?[\]\)]/g, "$1") + .replace(/^\s{0,3}>\s?/g, "") + .replace(/(^|\n)\s{0,3}>\s?/g, "\n\n") + .replace(/^\s{1,2}\[(.*?)\]: (\S+)( ".*?")?\s*$/g, "") + .replace( + /^(\n)?\s{0,}#{1,6}\s+| {0,}(\n)?\s{0,}#{0,} {0,}(\n)?\s{0,}$/gm, + "$1$2$3" + ) + .replace(/([\*_]{1,3})(\S.*?\S{0,1})\1/g, "$2") + .replace(/([\*_]{1,3})(\S.*?\S{0,1})\1/g, "$2") + .replace(/(`{3,})(.*?)\1/gm, "$2") + .replace(/`(.+?)`/g, "$1") + .replace(/\n{2,}/g, "\n\n"); + } catch (e) { + console.error(e); + return markdown; + } + return output; +}; +// ----- + +(async function() { + const contentIndex = new FlexSearch.Document({ + cache: true, + charset: "latin:extra", + optimize: true, + worker: true, + document: { + index: [{ + field: "content", + tokenize: "strict", + context: { + resolution: 5, + depth: 3, + bidirectional: true + }, + suggest: true, + }, { + field: "title", + tokenize: "forward", + }] + } + }) + + const { content } = await fetchData() + for (const [key, value] of Object.entries(content)) { + contentIndex.add({ + id: key, + title: value.title, + content: removeMarkdown(value.content), + }) + } + + const highlight = (content, term) => { + const highlightWindow = 20 + const tokenizedTerm = term.split(/\s+/).filter(t => t !== "") + const splitText = content.split(/\s+/).filter(t => t !== "") + const includesCheck = (token) => tokenizedTerm.some(term => token.toLowerCase().startsWith(term.toLowerCase())) + + const occurrencesIndices = splitText + .map(includesCheck) + + // calculate best index + let bestSum = 0 + let bestIndex = 0 + for (let i = 0; i < Math.max(occurrencesIndices.length - highlightWindow, 0); i++) { + const window = occurrencesIndices.slice(i, i + highlightWindow) + const windowSum = window.reduce((total, cur) => total + cur, 0) + if (windowSum >= bestSum) { + bestSum = windowSum + bestIndex = i + } + } + + const startIndex = Math.max(bestIndex - highlightWindow, 0) + const endIndex = Math.min(startIndex + 2 * highlightWindow, splitText.length) + const mappedText = splitText + .slice(startIndex, endIndex) + .map(token => { + if (includesCheck(token)) { + return `${token}` + } + return token + }) + .join(" ") + .replaceAll(' ', " ") + return `${startIndex === 0 ? "" : "..."}${mappedText}${endIndex === splitText.length ? "" : "..."}` + } + + const resultToHTML = ({url, title, content, term}) => { + const text = removeMarkdown(content) + const resultTitle = highlight(title, term) + const resultText = highlight(text, term) + return `` + } + + const redir = (id, term) => { + window.location.href = BASE_URL + `${id}#:~:text=${encodeURIComponent(term)}` + } + + const formatForDisplay = id => ({ + id, + url: id, + title: content[id].title, + content: content[id].content + }) + + const source = document.getElementById('search-bar') + const results = document.getElementById("results-container") + let term + source.addEventListener("keyup", (e) => { + if (e.key === "Enter") { + const anchor = document.getElementsByClassName("result-card")[0] + redir(anchor.id, term) + } + }) + source.addEventListener('input', (e) => { + term = e.target.value + contentIndex.search(term, [ + { + field: "content", + limit: 10, + suggest: true, + }, + { + field: "title", + limit: 5, + } + ]).then(searchResults => { + const getByField = field => { + const results = searchResults.filter(x => x.field === field) + if (results.length === 0) { + return [] + } else { + return [...results[0].result] + } + } + const allIds = new Set([...getByField('title'), ...getByField('content')]) + const finalResults = [...allIds].map(formatForDisplay) + + // display + if (finalResults.length === 0) { + results.innerHTML = `` + } else { + results.innerHTML = finalResults + .map(result => resultToHTML({ + ...result, + term, + })) + .join("\n") + const anchors = document.getElementsByClassName("result-card"); + [...anchors].forEach(anchor => { + anchor.onclick = () => redir(anchor.id, term) + }) + } + }) + }) + + + const searchContainer = document.getElementById("search-container") + + function openSearch() { + if (searchContainer.style.display === "none" || searchContainer.style.display === "") { + source.value = "" + results.innerHTML = "" + searchContainer.style.display = "block" + source.focus() + } else { + searchContainer.style.display = "none" + } + } + + function closeSearch() { + searchContainer.style.display = "none" + } + + document.addEventListener('keydown', (event) => { + if (event.key === "/") { + event.preventDefault() + openSearch() + } + if (event.key === "Escape") { + event.preventDefault() + closeSearch() + } + }) + + const searchButton = document.getElementById("search-icon") + searchButton.addEventListener('click', (evt) => { + openSearch() + }) + searchButton.addEventListener('keydown', (evt) => { + openSearch() + }) + searchContainer.addEventListener('click', (evt) => { + closeSearch() + }) + document.getElementById("search-space").addEventListener('click', (evt) => { + evt.stopPropagation() + }) +})() + diff --git a/assets/base.scss b/assets/styles/base.scss similarity index 100% rename from assets/base.scss rename to assets/styles/base.scss diff --git a/assets/custom.scss b/assets/styles/custom.scss similarity index 100% rename from assets/custom.scss rename to assets/styles/custom.scss diff --git a/assets/darkmode.scss b/assets/styles/darkmode.scss similarity index 100% rename from assets/darkmode.scss rename to assets/styles/darkmode.scss diff --git a/assets/syntax.scss b/assets/styles/syntax.scss similarity index 100% rename from assets/syntax.scss rename to assets/styles/syntax.scss diff --git a/layouts/partials/graph.html b/layouts/partials/graph.html index 14e1fdbe..31d008cd 100644 --- a/layouts/partials/graph.html +++ b/layouts/partials/graph.html @@ -10,232 +10,16 @@ --g-link-active: #5a7282; } +{{ $js := resources.Get "js/graph.js" | resources.Fingerprint "md5" }} + diff --git a/layouts/partials/head.html b/layouts/partials/head.html index 1afa3c64..107f2403 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -8,24 +8,21 @@ - {{$css := slice "base.scss" "darkmode.scss" "syntax.scss" "custom.scss"}} - {{range $css}} - {{$sass := resources.Get . | resources.ToCSS }} - {{with $sass | minify}} - - {{end}} + {{$sass := resources.Match "styles/[!_]*.scss" }} + {{$css := slice }} + {{range $sass}} + {{$scss := . | resources.ToCSS (dict "outputStyle" "compressed") }} + {{$css = $css | append $scss}} {{end}} + {{$finalCss := $css | resources.Concat "styles.css" | resources.Fingerprint "md5" | resources.Minify }} + - {{- with resources.Get "darkmode.js" | minify -}} - - {{- end -}} + {{ $darkMode := resources.Get "js/darkmode.js" | resources.Fingerprint "md5" | resources.Minify }} + {{end}} \ No newline at end of file diff --git a/layouts/partials/search.html b/layouts/partials/search.html index 6cc7e24f..7bc7ed0c 100644 --- a/layouts/partials/search.html +++ b/layouts/partials/search.html @@ -5,254 +5,6 @@
  • - {{index (index $contentTable .) "title"}} + {{index (index $contentTable .) "title"}}
  • - - - + +{{ $js := resources.Get "js/search.js" | resources.Fingerprint "md5" | resources.Minify }} + From 7e0f2e44497adeade4aa5a99da897be29cb49016 Mon Sep 17 00:00:00 2001 From: Claudio Yanes Date: Fri, 4 Mar 2022 02:25:30 +0000 Subject: [PATCH 085/695] Fix fetchData The fetchData function suffer from a race condition. If the function is called before the promise finishes, it will result in another pair of HTTP request. This does not only make the function useless but Actually, it makes it harmful as the data might be redownloaded twice. Now fetchData is not a function but rather the promise by itself. Previous callers are expected to await the variable instead, this should be not concern as awaiting a promise multiple time in JavaScript is completely safe. --- .github/workflows/deploy.yaml | 2 +- .gitignore | 4 ++-- assets/js/graph.js | 2 +- assets/js/popover.js | 2 +- assets/js/search.js | 2 +- layouts/partials/backlinks.html | 4 ++-- layouts/partials/head.html | 26 ++++++++------------------ 7 files changed, 16 insertions(+), 26 deletions(-) diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index a492b9b0..656ef4a7 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -16,7 +16,7 @@ jobs: with: index: true input: content - output: static + output: assets/indices root: . - name: Setup Hugo diff --git a/.gitignore b/.gitignore index 54ae7a3f..a7ccdb59 100644 --- a/.gitignore +++ b/.gitignore @@ -3,5 +3,5 @@ public resources .idea content/.obsidian -static/linkIndex.json -static/contentIndex.json \ No newline at end of file +assets/indices/linkIndex.json +assets/indices/contentIndex.json diff --git a/assets/js/graph.js b/assets/js/graph.js index f4fd4bb6..d7e85343 100644 --- a/assets/js/graph.js +++ b/assets/js/graph.js @@ -1,5 +1,5 @@ async function drawGraph(url, baseUrl, pathColors, depth, enableDrag, enableLegend, enableZoom) { - const { index, links, content } = await fetchData() + const { index, links, content } = await fetchData const curPage = url.replace(baseUrl, "") const parseIdsFromLinks = (links) => [...(new Set(links.flatMap(link => ([link.source, link.target]))))] diff --git a/assets/js/popover.js b/assets/js/popover.js index ef7bb615..6dfd2d2d 100644 --- a/assets/js/popover.js +++ b/assets/js/popover.js @@ -8,7 +8,7 @@ function htmlToElement(html) { function initPopover(base) { const baseUrl = base.replace(window.location.origin, "") // is this useless? document.addEventListener("DOMContentLoaded", () => { - fetchData().then(({content}) => { + fetchData.then(({content}) => { const links = [...document.getElementsByClassName("internal-link")] links.forEach(li => { const linkDest = content[li.dataset.src.replace(baseUrl, "")] diff --git a/assets/js/search.js b/assets/js/search.js index 9733c048..592d8595 100644 --- a/assets/js/search.js +++ b/assets/js/search.js @@ -81,7 +81,7 @@ const removeMarkdown = ( } }) - const { content } = await fetchData() + const { content } = await fetchData for (const [key, value] of Object.entries(content)) { contentIndex.add({ id: key, diff --git a/layouts/partials/backlinks.html b/layouts/partials/backlinks.html index d2143869..166e1fde 100644 --- a/layouts/partials/backlinks.html +++ b/layouts/partials/backlinks.html @@ -3,9 +3,9 @@ {{$url := urls.Parse .Site.BaseURL }} {{$host := strings.TrimRight "/" $url.Path }} {{$curPage := strings.TrimPrefix $host (strings.TrimRight "/" .Page.RelPermalink) }} - {{$linkIndex := getJSON "/static/linkIndex.json"}} + {{$linkIndex := getJSON "/assets/indices/linkIndex.json"}} {{$inbound := index $linkIndex.index.backlinks $curPage}} - {{$contentTable := getJSON "/static/contentIndex.json"}} + {{$contentTable := getJSON "/assets/indices/contentIndex.json"}} {{if $inbound}} {{$cleanedInbound := apply (apply $inbound "index" "." "source") "replace" "." " " "-"}} {{- range $cleanedInbound | uniq -}} diff --git a/layouts/partials/head.html b/layouts/partials/head.html index 107f2403..4085dd52 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -21,35 +21,25 @@ + {{$linkIndex := resources.Get "indices/linkIndex.json" | resources.Fingerprint "md5" | resources.Minify | }} + {{$contentIndex := resources.Get "indices/contentIndex.json" | resources.Fingerprint "md5" | resources.Minify }} {{ template "_internal/google_analytics.html" . }} From 7f6523337c96e631e80b18c888b2f237ea8a4482 Mon Sep 17 00:00:00 2001 From: Claudio Yanes Date: Fri, 4 Mar 2022 03:24:32 +0000 Subject: [PATCH 086/695] Move popover to the end of the page MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The popover script doesn’t ever start in until the DOM has finished Loading, so wait for the script to be downloaded and parsed before Showing the content to the user makes no sense. --- layouts/_default/section.html | 1 + layouts/_default/single.html | 1 + layouts/_default/taxonomy.html | 1 + layouts/_default/term.html | 1 + layouts/index.html | 1 + layouts/partials/head.html | 1 - 6 files changed, 5 insertions(+), 1 deletion(-) diff --git a/layouts/_default/section.html b/layouts/_default/section.html index abdf0b05..1a4aae05 100644 --- a/layouts/_default/section.html +++ b/layouts/_default/section.html @@ -19,6 +19,7 @@ {{partial "contact.html" .}} +{{partial "popover.html" .}} diff --git a/layouts/_default/single.html b/layouts/_default/single.html index ac8c216d..06892bdd 100644 --- a/layouts/_default/single.html +++ b/layouts/_default/single.html @@ -32,6 +32,7 @@ {{partial "footer.html" .}} + {{partial "popover.html" .}} diff --git a/layouts/_default/taxonomy.html b/layouts/_default/taxonomy.html index e0a1e876..b7a45b10 100644 --- a/layouts/_default/taxonomy.html +++ b/layouts/_default/taxonomy.html @@ -28,6 +28,7 @@ {{partial "contact.html" .}} +{{partial "popover.html" .}} diff --git a/layouts/_default/term.html b/layouts/_default/term.html index 58f024bc..16ea85cf 100644 --- a/layouts/_default/term.html +++ b/layouts/_default/term.html @@ -19,6 +19,7 @@ {{partial "contact.html" .}} +{{partial "popover.html" .}} diff --git a/layouts/index.html b/layouts/index.html index 17b69173..f0cd68e7 100644 --- a/layouts/index.html +++ b/layouts/index.html @@ -22,6 +22,7 @@ {{- .Content -}} {{partial "footer.html" .}} + {{partial "popover.html" .}} diff --git a/layouts/partials/head.html b/layouts/partials/head.html index 4085dd52..80893010 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -43,4 +43,3 @@ {{ template "_internal/google_analytics.html" . }} -{{ partial "popover.html" .}} From 8779e72c77c2e454d444b86d3d5ebda9bfab46d7 Mon Sep 17 00:00:00 2001 From: Claudio Yanes Date: Fri, 4 Mar 2022 03:34:45 +0000 Subject: [PATCH 087/695] Add attribute property to scripts from jsdelivr Adding the integrity attribute protects the website (by refusing to load the script) against malicious modifications of the script in the case of jsdelivr gets hacked --- layouts/partials/graph.html | 2 +- layouts/partials/search.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/layouts/partials/graph.html b/layouts/partials/graph.html index 31d008cd..ca379689 100644 --- a/layouts/partials/graph.html +++ b/layouts/partials/graph.html @@ -1,4 +1,4 @@ - +

    Interactive Graph

    {{ $js := resources.Get "js/graph.js" | resources.Fingerprint "md5" }} - diff --git a/layouts/partials/head.html b/layouts/partials/head.html index 195cade4..772153ad 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -1,46 +1,87 @@ - - - - {{ if .Title }}{{ .Title }}{{ else }}{{ $.Site.Data.config.page_title }}{{ end }} - - + + + + + {{ if .Title }}{{ .Title }}{{ else }}{{ $.Site.Data.config.page_title }}{{ + end }} + + + - - - {{$sass := resources.Match "styles/[!_]*.scss" }} - {{$css := slice }} - {{range $sass}} - {{$scss := . | resources.ToCSS (dict "outputStyle" "compressed") }} - {{$css = $css | append $scss}} - {{end}} - {{$finalCss := $css | resources.Concat "styles.css" | resources.Fingerprint "md5" | resources.Minify }} - + + + {{$sass := resources.Match "styles/[!_]*.scss" }} {{$css := slice }} {{range + $sass}} {{$scss := . | resources.ToCSS (dict "outputStyle" "compressed") }} + {{$css = $css | append $scss}} {{end}} {{$finalCss := $css | resources.Concat + "styles.css" | resources.Fingerprint "md5" | resources.Minify }} + - {{ $darkMode := resources.Get "js/darkmode.js" | resources.Fingerprint "md5" | resources.Minify }} - - {{partial "katex.html" .}} + {{ $darkMode := resources.Get "js/darkmode.js" | resources.Fingerprint "md5" | + resources.Minify }} + + {{partial "katex.html" .}} - - {{$linkIndex := resources.Get "indices/linkIndex.json" | resources.Fingerprint "md5" | resources.Minify | }} - {{$contentIndex := resources.Get "indices/contentIndex.json" | resources.Fingerprint "md5" | resources.Minify }} - + + {{$linkIndex := resources.Get "indices/linkIndex.json" | resources.Fingerprint + "md5" | resources.Minify | }} {{$contentIndex := resources.Get + "indices/contentIndex.json" | resources.Fingerprint "md5" | resources.Minify + }} + + {{ template "_internal/google_analytics.html" . }} From a9523dd39bf931e491750bb832dd13678e0e0c0d Mon Sep 17 00:00:00 2001 From: Aiden Bai Date: Sun, 1 May 2022 22:08:14 -0700 Subject: [PATCH 147/695] Add prettier config --- .prettierrc | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .prettierrc diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 00000000..f1bc35a4 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,6 @@ +{ + "printWidth": 100, + "quoteProps": "as-needed", + "trailingComma": "all", + "tabWidth": 2 +} From 87144fca212b25093adbf743014d5c0d5b1d9c0d Mon Sep 17 00:00:00 2001 From: Aiden Bai Date: Mon, 2 May 2022 08:57:25 -0700 Subject: [PATCH 148/695] Use semi: false for prettier config --- .prettierrc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.prettierrc b/.prettierrc index f1bc35a4..5788b66f 100644 --- a/.prettierrc +++ b/.prettierrc @@ -2,5 +2,6 @@ "printWidth": 100, "quoteProps": "as-needed", "trailingComma": "all", - "tabWidth": 2 + "tabWidth": 2, + "semi": false } From 5c602ab16f1f5e46bee5f44cec15860f785039ee Mon Sep 17 00:00:00 2001 From: Aiden Bai Date: Mon, 2 May 2022 09:04:36 -0700 Subject: [PATCH 149/695] Add clarification comments --- assets/js/graph.js | 6 +++--- assets/js/search.js | 1 + layouts/partials/head.html | 3 +++ 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/assets/js/graph.js b/assets/js/graph.js index 939fd99d..99ecf54e 100644 --- a/assets/js/graph.js +++ b/assets/js/graph.js @@ -16,9 +16,8 @@ async function drawGraph( ...new Set(links.flatMap((link) => [link.source, link.target])), ]; - // links is mutated by d3 - // we want to use links later on, so we make a copy and pass - // that one to d3 + // Links is mutated by d3. We want to use links later on, so we make a copy and pass that one to d3 + // Note: shallow cloning does not work because it copies over references from the original array const copyLinks = JSON.parse(JSON.stringify(links)); const neighbours = new Set(); @@ -176,6 +175,7 @@ async function drawGraph( .attr('fill', color) .style('cursor', 'pointer') .on('click', (_, d) => { + // SPA navigation window.navigate( new URL(`${baseUrl}${decodeURI(d.id).replace(/\s+/g, '-')}/`), '.singlePage' diff --git a/assets/js/search.js b/assets/js/search.js index 212b2c73..fcf79177 100644 --- a/assets/js/search.js +++ b/assets/js/search.js @@ -145,6 +145,7 @@ const removeMarkdown = ( }; const redir = (id, term) => { + // SPA navigation window.navigate( new URL( `${BASE_URL.slice(0, -1)}${id}#:~:text=${encodeURIComponent(term)}/` diff --git a/layouts/partials/head.html b/layouts/partials/head.html index 772153ad..ea67a001 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -57,9 +57,12 @@ + diff --git a/layouts/partials/head.html b/layouts/partials/head.html index 1dabaf66..37938a55 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -58,6 +58,7 @@ content, })) + {{if $.Site.Data.config.enableSPA}} + {{else}} + + {{end}} {{ template "_internal/google_analytics.html" . }} From 6e6dd4cb0b396ae7ec4f273bccd254bc0f9885d5 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Tue, 3 May 2022 10:57:20 -0400 Subject: [PATCH 157/695] fix: trim trailing slash when calculating popover --- assets/js/popover.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/js/popover.js b/assets/js/popover.js index a4b6852e..ee0477ef 100644 --- a/assets/js/popover.js +++ b/assets/js/popover.js @@ -13,7 +13,7 @@ function initPopover(baseURL) { links .filter(li => li.dataset.src) .forEach(li => { - const linkDest = content[li.dataset.src.replace(basePath, "")] + const linkDest = content[li.dataset.src.replace(/\/$/g, "").replace(basePath, "")] if (linkDest) { const popoverElement = `

    ${linkDest.title}

    From 77485b754dbb3d08e437b4157f3eafb5871624b9 Mon Sep 17 00:00:00 2001 From: Aiden Bai Date: Tue, 3 May 2022 08:47:42 -0700 Subject: [PATCH 158/695] Fix popover --- assets/js/popover.js | 40 +++++++++++++-------------- assets/js/router.js | 25 +++++++++++++++++ layouts/_default/section.html | 1 - layouts/_default/single.html | 3 +-- layouts/_default/taxonomy.html | 1 - layouts/_default/term.html | 1 - layouts/index.html | 4 +-- layouts/partials/head.html | 49 +++++++++++++++------------------- layouts/partials/popover.html | 7 ----- 9 files changed, 67 insertions(+), 64 deletions(-) create mode 100644 assets/js/router.js delete mode 100644 layouts/partials/popover.html diff --git a/assets/js/popover.js b/assets/js/popover.js index ee0477ef..460c245f 100644 --- a/assets/js/popover.js +++ b/assets/js/popover.js @@ -1,5 +1,5 @@ function htmlToElement(html) { - const template = document.createElement('template') + const template = document.createElement("template") html = html.trim() template.innerHTML = html return template.content.firstChild @@ -7,29 +7,27 @@ function htmlToElement(html) { function initPopover(baseURL) { const basePath = baseURL.replace(window.location.origin, "") - document.addEventListener("DOMContentLoaded", () => { - fetchData.then(({ content }) => { - const links = [...document.getElementsByClassName("internal-link")] - links - .filter(li => li.dataset.src) - .forEach(li => { - const linkDest = content[li.dataset.src.replace(/\/$/g, "").replace(basePath, "")] - if (linkDest) { - const popoverElement = `
    + fetchData.then(({ content }) => { + const links = [...document.getElementsByClassName("internal-link")] + links + .filter((li) => li.dataset.src) + .forEach((li) => { + const linkDest = content[li.dataset.src.replace(/\/$/g, "").replace(basePath, "")] + if (linkDest) { + const popoverElement = `

    ${linkDest.title}

    ${removeMarkdown(linkDest.content).split(" ", 20).join(" ")}...

    ${new Date(linkDest.lastmodified).toLocaleDateString()}

    ` - const el = htmlToElement(popoverElement) - li.appendChild(el) - li.addEventListener("mouseover", () => { - el.classList.add("visible") - }) - li.addEventListener("mouseout", () => { - el.classList.remove("visible") - }) - } - }) - }) + const el = htmlToElement(popoverElement) + li.appendChild(el) + li.addEventListener("mouseover", () => { + el.classList.add("visible") + }) + li.addEventListener("mouseout", () => { + el.classList.remove("visible") + }) + } + }) }) } diff --git a/assets/js/router.js b/assets/js/router.js new file mode 100644 index 00000000..5c874eee --- /dev/null +++ b/assets/js/router.js @@ -0,0 +1,25 @@ +import { router, navigate } from "https://unpkg.com/million/dist/router.mjs" + +export const init = (loader) => { + // SPA navigation for access later + window.navigate = navigate + // We only mutate document.title and content within .singlePage element + router(".singlePage") + // We need on initial load, then subsequent redirs + window.addEventListener("million:navigate", () => callback(loader)) + window.addEventListener("DOMContentLoaded", () => callback(loader)) +} + +export const callback = (loader) => { + // requestAnimationFrame() delays graph draw until SPA routing is finished + const draw = () => { + const container = document.getElementById("graph-container") + // retry if the graph is not ready + if (!container) return requestAnimationFrame(draw) + // clear the graph in case there is anything within it + container.textContent = "" + + loader() + } + requestAnimationFrame(draw) +} diff --git a/layouts/_default/section.html b/layouts/_default/section.html index 1a4aae05..abdf0b05 100644 --- a/layouts/_default/section.html +++ b/layouts/_default/section.html @@ -19,7 +19,6 @@ {{partial "contact.html" .}}
    -{{partial "popover.html" .}} diff --git a/layouts/_default/single.html b/layouts/_default/single.html index 88a859c3..91eda290 100644 --- a/layouts/_default/single.html +++ b/layouts/_default/single.html @@ -22,11 +22,10 @@
  • {{ .LinkTitle | humanize }}
  • {{ end }} - {{partial "toc.html" .}} + {{partial "toc.html" .}} {{partial "textprocessing.html" . }} {{partial "footer.html" .}} - {{partial "popover.html" .}}
    diff --git a/layouts/_default/taxonomy.html b/layouts/_default/taxonomy.html index b7a45b10..e0a1e876 100644 --- a/layouts/_default/taxonomy.html +++ b/layouts/_default/taxonomy.html @@ -28,7 +28,6 @@ {{partial "contact.html" .}} -{{partial "popover.html" .}} diff --git a/layouts/_default/term.html b/layouts/_default/term.html index 16ea85cf..58f024bc 100644 --- a/layouts/_default/term.html +++ b/layouts/_default/term.html @@ -19,7 +19,6 @@ {{partial "contact.html" .}} -{{partial "popover.html" .}} diff --git a/layouts/index.html b/layouts/index.html index ee33d7cc..224c9978 100644 --- a/layouts/index.html +++ b/layouts/index.html @@ -13,12 +13,10 @@ {{partial "darkmode.html" .}}
    - {{partial "toc.html" .}} + {{partial "toc.html" .}} {{partial "textprocessing.html" . }}
    {{partial "footer.html" .}} - {{partial "popover.html" .}} - diff --git a/layouts/partials/head.html b/layouts/partials/head.html index 37938a55..60ff7827 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -35,6 +35,10 @@ {{partial "katex.html" .}} + {{ $popover := resources.Get "js/popover.js" | resources.Fingerprint "md5" | + resources.Minify }} + + {{$linkIndex := resources.Get "indices/linkIndex.json" | resources.Fingerprint "md5" | resources.Minify | }} {{$contentIndex := resources.Get @@ -59,36 +63,25 @@ })) {{if $.Site.Data.config.enableSPA}} + {{ $router := resources.Get "js/router.js" | resources.Fingerprint "md5" | + resources.Minify }} {{else}} diff --git a/layouts/partials/popover.html b/layouts/partials/popover.html deleted file mode 100644 index 1d166228..00000000 --- a/layouts/partials/popover.html +++ /dev/null @@ -1,7 +0,0 @@ -{{if $.Site.Data.config.enableLinkPreview}} -{{ $js := resources.Get "js/popover.js" | resources.Fingerprint "md5" | resources.Minify }} - - -{{end}} \ No newline at end of file From 9c71f07355d8e98478e755875e53596f66c58fa9 Mon Sep 17 00:00:00 2001 From: Aiden Bai Date: Tue, 3 May 2022 08:48:35 -0700 Subject: [PATCH 159/695] Enable config for testing --- data/config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/config.yaml b/data/config.yaml index afa531c3..2676ac2a 100644 --- a/data/config.yaml +++ b/data/config.yaml @@ -3,7 +3,7 @@ enableToc: true openToc: false enableLinkPreview: true enableLatex: true -enableSPA: false +enableSPA: true description: Host your second brain and digital garden for free. Quartz features extremely fast full-text search, Wikilink support, backlinks, local graph, tags, and link previews. From 9d3bbd607687899d173e9087f2782d7460ebee82 Mon Sep 17 00:00:00 2001 From: Aiden Bai Date: Tue, 3 May 2022 08:53:18 -0700 Subject: [PATCH 160/695] Fix active node on graph --- assets/js/graph.js | 4 ++-- data/config.yaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/assets/js/graph.js b/assets/js/graph.js index c5829e92..c32035d8 100644 --- a/assets/js/graph.js +++ b/assets/js/graph.js @@ -1,5 +1,5 @@ async function drawGraph( - url, + _url, baseUrl, pathColors, depth, @@ -10,7 +10,7 @@ async function drawGraph( const container = document.getElementById('graph-container') const { index, links, content } = await fetchData - const curPage = url.replace(baseUrl, '') + const curPage = window.location.href.replace(baseUrl, '').slice(0, -1) const parseIdsFromLinks = (links) => [ ...new Set(links.flatMap((link) => [link.source, link.target])), diff --git a/data/config.yaml b/data/config.yaml index afa531c3..2676ac2a 100644 --- a/data/config.yaml +++ b/data/config.yaml @@ -3,7 +3,7 @@ enableToc: true openToc: false enableLinkPreview: true enableLatex: true -enableSPA: false +enableSPA: true description: Host your second brain and digital garden for free. Quartz features extremely fast full-text search, Wikilink support, backlinks, local graph, tags, and link previews. From 4cca3c1f2df91ba7bb111346447279087e04069a Mon Sep 17 00:00:00 2001 From: Aiden Bai Date: Tue, 3 May 2022 09:04:15 -0700 Subject: [PATCH 161/695] Peg router version --- assets/js/router.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/js/router.js b/assets/js/router.js index 5c874eee..bf7e3c85 100644 --- a/assets/js/router.js +++ b/assets/js/router.js @@ -1,4 +1,4 @@ -import { router, navigate } from "https://unpkg.com/million/dist/router.mjs" +import { router, navigate } from "https://unpkg.com/million@1.8.9-0/dist/router.mjs" export const init = (loader) => { // SPA navigation for access later From 3c660dd9b5f9e1133bc8a1228287508504b7c132 Mon Sep 17 00:00:00 2001 From: Aiden Bai Date: Tue, 3 May 2022 09:20:01 -0700 Subject: [PATCH 162/695] Remove unnecessary 'url' param in drawGraph --- assets/js/graph.js | 1 - layouts/partials/head.html | 1 - 2 files changed, 2 deletions(-) diff --git a/assets/js/graph.js b/assets/js/graph.js index c32035d8..e92f7db6 100644 --- a/assets/js/graph.js +++ b/assets/js/graph.js @@ -1,5 +1,4 @@ async function drawGraph( - _url, baseUrl, pathColors, depth, diff --git a/layouts/partials/head.html b/layouts/partials/head.html index 37938a55..93051cb9 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -75,7 +75,6 @@ container.textContent = ""; drawGraph( - {{strings.TrimRight "/" .Page.Permalink}}, {{strings.TrimRight "/" .Site.BaseURL}}, {{$.Site.Data.graphConfig.paths}}, {{$.Site.Data.graphConfig.depth}}, From 32c79a561fa82dbf6537b96e83ab3da2a848b211 Mon Sep 17 00:00:00 2001 From: Aiden Bai Date: Tue, 3 May 2022 09:21:44 -0700 Subject: [PATCH 163/695] Remove unnecessary 'url' argument in graph.html --- layouts/partials/graph.html | 1 - 1 file changed, 1 deletion(-) diff --git a/layouts/partials/graph.html b/layouts/partials/graph.html index b8b2f616..6bc77b64 100644 --- a/layouts/partials/graph.html +++ b/layouts/partials/graph.html @@ -18,7 +18,6 @@ {{else}} From 1a5d158fce648492c48644acfea039261ac1dffa Mon Sep 17 00:00:00 2001 From: Aiden Bai Date: Tue, 3 May 2022 10:38:41 -0700 Subject: [PATCH 168/695] Support active node with other data at end of url --- assets/js/graph.js | 3 ++- assets/js/search.js | 2 +- layouts/partials/graph.html | 10 ---------- 3 files changed, 3 insertions(+), 12 deletions(-) diff --git a/assets/js/graph.js b/assets/js/graph.js index db1cfe2a..5739acdc 100644 --- a/assets/js/graph.js +++ b/assets/js/graph.js @@ -9,7 +9,8 @@ async function drawGraph( const container = document.getElementById('graph-container') const { index, links, content } = await fetchData - const curPage = window.location.href.replace(baseUrl, "").replace(/\/$/g, "") + // Use .pathname to remove hashes / searchParams / text fragments + const curPage = window.location.pathname.replace(/\/$/g, "") const parseIdsFromLinks = (links) => [ ...new Set(links.flatMap((link) => [link.source, link.target])), diff --git a/assets/js/search.js b/assets/js/search.js index f124d582..26ea39ad 100644 --- a/assets/js/search.js +++ b/assets/js/search.js @@ -144,7 +144,7 @@ const removeMarkdown = ( // SPA navigation window.navigate( new URL( - `${BASE_URL}${id}#:~:text=${encodeURIComponent(term)}/` + `${BASE_URL.replace(/\/$/g, "")}${id}#:~:text=${encodeURIComponent(term)}/` ), '.singlePage' ) diff --git a/layouts/partials/graph.html b/layouts/partials/graph.html index 6bc77b64..b9f79763 100644 --- a/layouts/partials/graph.html +++ b/layouts/partials/graph.html @@ -16,13 +16,3 @@ {{ $js := resources.Get "js/graph.js" | resources.Fingerprint "md5" }} - From aaed5dc1f1849a54869743596a6133548e83392d Mon Sep 17 00:00:00 2001 From: Aiden Bai Date: Tue, 3 May 2022 10:54:39 -0700 Subject: [PATCH 169/695] Support /path root sites --- assets/js/graph.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/assets/js/graph.js b/assets/js/graph.js index 5739acdc..e1bbbebe 100644 --- a/assets/js/graph.js +++ b/assets/js/graph.js @@ -7,10 +7,13 @@ async function drawGraph( enableZoom ) { const container = document.getElementById('graph-container') - const { index, links, content } = await fetchData + + const rawUrl = new URL(window.location.href); // Use .pathname to remove hashes / searchParams / text fragments - const curPage = window.location.pathname.replace(/\/$/g, "") + const cleanUrl = rawUrl.origin + rawUrl.pathname + + const curPage = cleanUrl.replace(/\/$/g, "").replace(baseUrl, "") const parseIdsFromLinks = (links) => [ ...new Set(links.flatMap((link) => [link.source, link.target])), From 2b5c03c97286e06e94e8a27634678e64473a2ec8 Mon Sep 17 00:00:00 2001 From: Aiden Bai Date: Tue, 3 May 2022 10:55:45 -0700 Subject: [PATCH 170/695] Remove redundant URL construction --- assets/js/graph.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/assets/js/graph.js b/assets/js/graph.js index e1bbbebe..f71e44d3 100644 --- a/assets/js/graph.js +++ b/assets/js/graph.js @@ -9,9 +9,8 @@ async function drawGraph( const container = document.getElementById('graph-container') const { index, links, content } = await fetchData - const rawUrl = new URL(window.location.href); // Use .pathname to remove hashes / searchParams / text fragments - const cleanUrl = rawUrl.origin + rawUrl.pathname + const cleanUrl = window.location.origin + window.location.pathname const curPage = cleanUrl.replace(/\/$/g, "").replace(baseUrl, "") From b4ff12ca0b1b5179c20a1ea57f182caa703b0826 Mon Sep 17 00:00:00 2001 From: Aiden Bai Date: Wed, 4 May 2022 08:10:59 -0700 Subject: [PATCH 171/695] Fix latex --- .pnpm-debug.log | 14 ++++++++++++++ layouts/partials/head.html | 9 +++++++++ layouts/partials/katex.html | 11 ----------- 3 files changed, 23 insertions(+), 11 deletions(-) create mode 100644 .pnpm-debug.log diff --git a/.pnpm-debug.log b/.pnpm-debug.log new file mode 100644 index 00000000..ce5adc89 --- /dev/null +++ b/.pnpm-debug.log @@ -0,0 +1,14 @@ +{ + "0 debug pnpm:scope": { + "selected": 1 + }, + "1 error pnpm": { + "code": "ERR_PNPM_NO_SCRIPT", + "err": { + "name": "pnpm", + "message": "Missing script: dev", + "code": "ERR_PNPM_NO_SCRIPT", + "stack": "pnpm: Missing script: dev\n at Object.handler (/opt/homebrew/lib/node_modules/pnpm/dist/pnpm.cjs:170956:15)\n at async /opt/homebrew/lib/node_modules/pnpm/dist/pnpm.cjs:175391:21\n at async run (/opt/homebrew/lib/node_modules/pnpm/dist/pnpm.cjs:175365:34)\n at async runPnpm (/opt/homebrew/lib/node_modules/pnpm/dist/pnpm.cjs:175583:5)\n at async /opt/homebrew/lib/node_modules/pnpm/dist/pnpm.cjs:175575:7" + } + } +} \ No newline at end of file diff --git a/layouts/partials/head.html b/layouts/partials/head.html index b917afbc..097cae79 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -87,6 +87,15 @@ {{if $.Site.Data.config.enableLinkPreview}} initPopover({{strings.TrimRight "/" .Site.BaseURL }}) {{end}} + {{if $.Site.Data.config.enableLatex}} + renderMathInElement(document.body, { + delimiters: [ + {left: '$$', right: '$$', display: true}, + {left: '$', right: '$', display: false}, + ], + throwOnError : false + }); + {{end}} }; attachSPARouting(draw); diff --git a/layouts/partials/katex.html b/layouts/partials/katex.html index e11c4f14..756ef779 100644 --- a/layouts/partials/katex.html +++ b/layouts/partials/katex.html @@ -2,15 +2,4 @@ - {{end}} From 7b3696b877c33f8dc605be1f4f4a688fe0df5b84 Mon Sep 17 00:00:00 2001 From: Aiden Bai Date: Wed, 4 May 2022 08:39:25 -0700 Subject: [PATCH 172/695] Remove pnpm debug log --- .pnpm-debug.log | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 .pnpm-debug.log diff --git a/.pnpm-debug.log b/.pnpm-debug.log deleted file mode 100644 index ce5adc89..00000000 --- a/.pnpm-debug.log +++ /dev/null @@ -1,14 +0,0 @@ -{ - "0 debug pnpm:scope": { - "selected": 1 - }, - "1 error pnpm": { - "code": "ERR_PNPM_NO_SCRIPT", - "err": { - "name": "pnpm", - "message": "Missing script: dev", - "code": "ERR_PNPM_NO_SCRIPT", - "stack": "pnpm: Missing script: dev\n at Object.handler (/opt/homebrew/lib/node_modules/pnpm/dist/pnpm.cjs:170956:15)\n at async /opt/homebrew/lib/node_modules/pnpm/dist/pnpm.cjs:175391:21\n at async run (/opt/homebrew/lib/node_modules/pnpm/dist/pnpm.cjs:175365:34)\n at async runPnpm (/opt/homebrew/lib/node_modules/pnpm/dist/pnpm.cjs:175583:5)\n at async /opt/homebrew/lib/node_modules/pnpm/dist/pnpm.cjs:175575:7" - } - } -} \ No newline at end of file From cea0f3eb743b26db0d5297ab10e229617585fe0c Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Thu, 5 May 2022 00:58:50 -0400 Subject: [PATCH 173/695] feat: contextual backlinks (closes #106) --- .github/workflows/deploy.yaml | 2 +- assets/js/popover.js | 28 +++++++-- assets/js/search.js | 104 +++++++++++++++++--------------- assets/styles/base.scss | 12 ++-- data/config.yaml | 1 + layouts/partials/backlinks.html | 15 +++-- layouts/partials/popover.html | 5 +- 7 files changed, 101 insertions(+), 66 deletions(-) diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index ee51d3ee..8334ea2e 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -14,7 +14,7 @@ jobs: fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod - name: Build Link Index - uses: jackyzha0/hugo-obsidian@v2.12 + uses: jackyzha0/hugo-obsidian@v2.13 with: index: true input: content diff --git a/assets/js/popover.js b/assets/js/popover.js index ee0477ef..ea01156b 100644 --- a/assets/js/popover.js +++ b/assets/js/popover.js @@ -5,19 +5,20 @@ function htmlToElement(html) { return template.content.firstChild } -function initPopover(baseURL) { +function initPopover(baseURL, useContextualBacklinks) { const basePath = baseURL.replace(window.location.origin, "") document.addEventListener("DOMContentLoaded", () => { fetchData.then(({ content }) => { const links = [...document.getElementsByClassName("internal-link")] links - .filter(li => li.dataset.src) + .filter(li => li.dataset.src || (li.dataset.idx && useContextualBacklinks)) .forEach(li => { - const linkDest = content[li.dataset.src.replace(/\/$/g, "").replace(basePath, "")] - if (linkDest) { + if (li.dataset.ctx) { + console.log(li.dataset.ctx) + const linkDest = content[li.dataset.src] const popoverElement = `

    ${linkDest.title}

    -

    ${removeMarkdown(linkDest.content).split(" ", 20).join(" ")}...

    +

    ${highlight(removeMarkdown(linkDest.content), li.dataset.ctx)}...

    ${new Date(linkDest.lastmodified).toLocaleDateString()}

    ` const el = htmlToElement(popoverElement) @@ -28,6 +29,23 @@ function initPopover(baseURL) { li.addEventListener("mouseout", () => { el.classList.remove("visible") }) + } else { + const linkDest = content[li.dataset.src.replace(/\/$/g, "").replace(basePath, "")] + if (linkDest) { + const popoverElement = `
    +

    ${linkDest.title}

    +

    ${removeMarkdown(linkDest.content).split(" ", 20).join(" ")}...

    +

    ${new Date(linkDest.lastmodified).toLocaleDateString()}

    +
    ` + const el = htmlToElement(popoverElement) + li.appendChild(el) + li.addEventListener("mouseover", () => { + el.classList.add("visible") + }) + li.addEventListener("mouseout", () => { + el.classList.remove("visible") + }) + } } }) }) diff --git a/assets/js/search.js b/assets/js/search.js index f124d582..c5e293cc 100644 --- a/assets/js/search.js +++ b/assets/js/search.js @@ -52,9 +52,65 @@ const removeMarkdown = ( return markdown } return output -}; +} // ----- +const highlight = (content, term) => { + const highlightWindow = 20 + + // try to find direct match first + const directMatchIdx = content.indexOf(term) + if (directMatchIdx !== -1) { + const h = highlightWindow / 2 + const before = content.substring(0, directMatchIdx).split(" ").slice(-h) + const after = content.substring(directMatchIdx + term.length, content.length - 1).split(" ").slice(0, h) + return (before.length == h ? `...${before.join(" ")}` : before.join(" ")) + `${term}` + after.join(" ") + } + + const tokenizedTerm = term.split(/\s+/).filter((t) => t !== '') + const splitText = content.split(/\s+/).filter((t) => t !== '') + const includesCheck = (token) => + tokenizedTerm.some((term) => + token.toLowerCase().startsWith(term.toLowerCase()) + ) + + const occurrencesIndices = splitText.map(includesCheck) + + // calculate best index + let bestSum = 0 + let bestIndex = 0 + for ( + let i = 0; + i < Math.max(occurrencesIndices.length - highlightWindow, 0); + i++ + ) { + const window = occurrencesIndices.slice(i, i + highlightWindow) + const windowSum = window.reduce((total, cur) => total + cur, 0) + if (windowSum >= bestSum) { + bestSum = windowSum + bestIndex = i + } + } + + const startIndex = Math.max(bestIndex - highlightWindow, 0) + const endIndex = Math.min( + startIndex + 2 * highlightWindow, + splitText.length + ) + const mappedText = splitText + .slice(startIndex, endIndex) + .map((token) => { + if (includesCheck(token)) { + return `${token}` + } + return token + }) + .join(' ') + .replaceAll(' ', ' ') + return `${startIndex === 0 ? '' : '...'}${mappedText}${endIndex === splitText.length ? '' : '...' + }` +}; + (async function() { const encoder = (str) => str.toLowerCase().split(/([^a-z]|[^\x00-\x7F])+/) const contentIndex = new FlexSearch.Document({ @@ -84,52 +140,6 @@ const removeMarkdown = ( }) } - const highlight = (content, term) => { - const highlightWindow = 20 - const tokenizedTerm = term.split(/\s+/).filter((t) => t !== '') - const splitText = content.split(/\s+/).filter((t) => t !== '') - const includesCheck = (token) => - tokenizedTerm.some((term) => - token.toLowerCase().startsWith(term.toLowerCase()) - ) - - const occurrencesIndices = splitText.map(includesCheck) - - // calculate best index - let bestSum = 0 - let bestIndex = 0 - for ( - let i = 0; - i < Math.max(occurrencesIndices.length - highlightWindow, 0); - i++ - ) { - const window = occurrencesIndices.slice(i, i + highlightWindow) - const windowSum = window.reduce((total, cur) => total + cur, 0) - if (windowSum >= bestSum) { - bestSum = windowSum - bestIndex = i - } - } - - const startIndex = Math.max(bestIndex - highlightWindow, 0) - const endIndex = Math.min( - startIndex + 2 * highlightWindow, - splitText.length - ) - const mappedText = splitText - .slice(startIndex, endIndex) - .map((token) => { - if (includesCheck(token)) { - return `${token}` - } - return token - }) - .join(' ') - .replaceAll(' ', ' ') - return `${startIndex === 0 ? '' : '...'}${mappedText}${endIndex === splitText.length ? '' : '...' - }` - } - const resultToHTML = ({ url, title, content, term }) => { const text = removeMarkdown(content) const resultTitle = highlight(title, term) diff --git a/assets/styles/base.scss b/assets/styles/base.scss index 9bbd933a..07874709 100644 --- a/assets/styles/base.scss +++ b/assets/styles/base.scss @@ -478,17 +478,17 @@ header { & > h3, & > p { margin: 0; } - - & .search-highlight { - background-color: #afbfc966; - padding: 0.05em 0.2em; - border-radius: 3px; - } } } } } +.search-highlight { + background-color: #afbfc966; + padding: 0.05em 0.2em; + border-radius: 3px; +} + .section-ul { list-style: none; padding-left: 0; diff --git a/data/config.yaml b/data/config.yaml index afa531c3..ccf38eb7 100644 --- a/data/config.yaml +++ b/data/config.yaml @@ -4,6 +4,7 @@ openToc: false enableLinkPreview: true enableLatex: true enableSPA: false +enableContextualBacklinks: true description: Host your second brain and digital garden for free. Quartz features extremely fast full-text search, Wikilink support, backlinks, local graph, tags, and link previews. diff --git a/layouts/partials/backlinks.html b/layouts/partials/backlinks.html index e42351ad..23c9091a 100644 --- a/layouts/partials/backlinks.html +++ b/layouts/partials/backlinks.html @@ -7,13 +7,18 @@ {{$inbound := index $linkIndex.index.backlinks $curPage}} {{$contentTable := getJSON "/assets/indices/contentIndex.json"}} {{if $inbound}} - {{$cleanedInbound := apply (apply $inbound "index" "." "source") "replace" "." " " "-"}} - {{- range $cleanedInbound | uniq -}} - {{$l := printf "%s%s/" $host .}} + {{$backlinks := dict "SENTINEL" "SENTINEL"}} + {{range $k, $v := $inbound}} + {{$cleanedInbound := replace $v.source " " "-"}} + {{$ctx := $v.text}} + {{$backlinks = merge $backlinks (dict $cleanedInbound $ctx)}} + {{end}} + {{- range $lnk, $ctx := $backlinks -}} + {{$l := printf "%s%s/" $host $lnk}} {{$l = cond (eq $l "//") "/" $l}} - {{with (index $contentTable .)}} + {{with (index $contentTable $lnk)}}
  • - {{index (index . "title")}} + {{index (index . "title")}}
  • {{end}} {{- end -}} diff --git a/layouts/partials/popover.html b/layouts/partials/popover.html index 1d166228..ba1fd037 100644 --- a/layouts/partials/popover.html +++ b/layouts/partials/popover.html @@ -2,6 +2,7 @@ {{ $js := resources.Get "js/popover.js" | resources.Fingerprint "md5" | resources.Minify }} -{{end}} \ No newline at end of file +{{end}} From b21b27d1d3d68bfb4d285f39122a154fceefb9ab Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Thu, 5 May 2022 20:30:55 -0400 Subject: [PATCH 174/695] fix: clean wikilinks and render latex in popover --- assets/js/popover.js | 41 +++++++++++++++++++-------------- assets/js/search.js | 1 + layouts/partials/head.html | 6 ++++- layouts/partials/page-list.html | 2 +- 4 files changed, 31 insertions(+), 19 deletions(-) diff --git a/assets/js/popover.js b/assets/js/popover.js index 9270b8ae..5fb2244a 100644 --- a/assets/js/popover.js +++ b/assets/js/popover.js @@ -5,13 +5,14 @@ function htmlToElement(html) { return template.content.firstChild } -function initPopover(baseURL, useContextualBacklinks) { +function initPopover(baseURL, useContextualBacklinks, renderLatex) { const basePath = baseURL.replace(window.location.origin, "") fetchData.then(({ content }) => { const links = [...document.getElementsByClassName("internal-link")] links .filter(li => li.dataset.src || (li.dataset.idx && useContextualBacklinks)) .forEach(li => { + var el if (li.dataset.ctx) { const linkDest = content[li.dataset.src] const popoverElement = `
    @@ -19,32 +20,38 @@ function initPopover(baseURL, useContextualBacklinks) {

    ${highlight(removeMarkdown(linkDest.content), li.dataset.ctx)}...

    ${new Date(linkDest.lastmodified).toLocaleDateString()}

    ` - const el = htmlToElement(popoverElement) - li.appendChild(el) - li.addEventListener("mouseover", () => { - el.classList.add("visible") - }) - li.addEventListener("mouseout", () => { - el.classList.remove("visible") - }) + el = htmlToElement(popoverElement) } else { const linkDest = content[li.dataset.src.replace(/\/$/g, "").replace(basePath, "")] + console.log(linkDest.content) if (linkDest) { const popoverElement = `

    ${linkDest.title}

    ${removeMarkdown(linkDest.content).split(" ", 20).join(" ")}...

    ${new Date(linkDest.lastmodified).toLocaleDateString()}

    ` - const el = htmlToElement(popoverElement) - li.appendChild(el) - li.addEventListener("mouseover", () => { - el.classList.add("visible") - }) - li.addEventListener("mouseout", () => { - el.classList.remove("visible") - }) + el = htmlToElement(popoverElement) } } + li.appendChild(el) + if (renderLatex) { + renderMathInElement(el, { + delimiters: [ + { left: '$$', right: '$$', display: false }, + { left: '$', right: '$', display: false }, + { left: '\\(', right: '\\)', display: false }, + { left: '\\[', right: '\\]', display: false } + ], + throwOnError: false + }) + } + li.addEventListener("mouseover", () => { + el.classList.add("visible") + }) + li.addEventListener("mouseout", () => { + el.classList.remove("visible") + }) + }) }) } diff --git a/assets/js/search.js b/assets/js/search.js index 975eaa65..195a40be 100644 --- a/assets/js/search.js +++ b/assets/js/search.js @@ -39,6 +39,7 @@ const removeMarkdown = ( .replace(/\s{0,2}\[.*?\]: .*?$/g, '') .replace(/\!\[(.*?)\][\[\(].*?[\]\)]/g, options.useImgAltText ? '$1' : '') .replace(/\[(.*?)\][\[\(].*?[\]\)]/g, '$1') + .replace(/!?\[\[\S[^\[\]\|]*(?:\|([^\[\]]*))?\S\]\]/g, '$1') .replace(/^\s{0,3}>\s?/g, '') .replace(/(^|\n)\s{0,3}>\s?/g, '\n\n') .replace(/^\s{1,2}\[(.*?)\]: (\S+)( ".*?")?\s*$/g, '') diff --git a/layouts/partials/head.html b/layouts/partials/head.html index a8d947e4..a5f23da3 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -85,7 +85,11 @@ ); {{if $.Site.Data.config.enableLinkPreview}} - initPopover({{strings.TrimRight "/" .Site.BaseURL }}, {{$.Site.Data.config.enableContextualBacklinks}}) + initPopover( + {{strings.TrimRight "/" .Site.BaseURL }}, + {{$.Site.Data.config.enableContextualBacklinks}}, + {{$.Site.Data.config.enableLatex}} + ) {{end}} {{if $.Site.Data.config.enableLatex}} renderMathInElement(document.body, { diff --git a/layouts/partials/page-list.html b/layouts/partials/page-list.html index bdfcd59c..6c2249ba 100644 --- a/layouts/partials/page-list.html +++ b/layouts/partials/page-list.html @@ -12,4 +12,4 @@ {{- end -}} - \ No newline at end of file + From e302f6c423136d1dbdfda48c2b241e62bb5654e7 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Thu, 5 May 2022 20:35:32 -0400 Subject: [PATCH 175/695] fix: more generic style to match bad nesting generated by popover interp --- assets/styles/base.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/styles/base.scss b/assets/styles/base.scss index 07874709..6378f900 100644 --- a/assets/styles/base.scss +++ b/assets/styles/base.scss @@ -441,7 +441,7 @@ header { } & > #results-container { - & > .result-card { + & .result-card { padding: 1em; cursor: pointer; transition: background 0.2s ease; From ed9a8efd1ff4ee569fa4256e044151670abaea82 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Thu, 5 May 2022 21:11:23 -0400 Subject: [PATCH 176/695] fix inline link highlighting, safer latex render --- assets/js/popover.js | 37 +++++++++++++++++++------------------ assets/js/search.js | 4 ++-- assets/styles/base.scss | 2 +- 3 files changed, 22 insertions(+), 21 deletions(-) diff --git a/assets/js/popover.js b/assets/js/popover.js index 5fb2244a..494cd84e 100644 --- a/assets/js/popover.js +++ b/assets/js/popover.js @@ -23,7 +23,6 @@ function initPopover(baseURL, useContextualBacklinks, renderLatex) { el = htmlToElement(popoverElement) } else { const linkDest = content[li.dataset.src.replace(/\/$/g, "").replace(basePath, "")] - console.log(linkDest.content) if (linkDest) { const popoverElement = `

    ${linkDest.title}

    @@ -33,25 +32,27 @@ function initPopover(baseURL, useContextualBacklinks, renderLatex) { el = htmlToElement(popoverElement) } } - li.appendChild(el) - if (renderLatex) { - renderMathInElement(el, { - delimiters: [ - { left: '$$', right: '$$', display: false }, - { left: '$', right: '$', display: false }, - { left: '\\(', right: '\\)', display: false }, - { left: '\\[', right: '\\]', display: false } - ], - throwOnError: false + + if (el) { + li.appendChild(el) + if (renderLatex) { + renderMathInElement(el, { + delimiters: [ + { left: '$$', right: '$$', display: false }, + { left: '$', right: '$', display: false }, + { left: '\\(', right: '\\)', display: false }, + { left: '\\[', right: '\\]', display: false } + ], + throwOnError: false + }) + } + li.addEventListener("mouseover", () => { + el.classList.add("visible") + }) + li.addEventListener("mouseout", () => { + el.classList.remove("visible") }) } - li.addEventListener("mouseover", () => { - el.classList.add("visible") - }) - li.addEventListener("mouseout", () => { - el.classList.remove("visible") - }) - }) }) } diff --git a/assets/js/search.js b/assets/js/search.js index 195a40be..bb94cd30 100644 --- a/assets/js/search.js +++ b/assets/js/search.js @@ -38,8 +38,8 @@ const removeMarkdown = ( .replace(/(#{1,6})\s+(.+)\1?/g, '$2') .replace(/\s{0,2}\[.*?\]: .*?$/g, '') .replace(/\!\[(.*?)\][\[\(].*?[\]\)]/g, options.useImgAltText ? '$1' : '') - .replace(/\[(.*?)\][\[\(].*?[\]\)]/g, '$1') - .replace(/!?\[\[\S[^\[\]\|]*(?:\|([^\[\]]*))?\S\]\]/g, '$1') + .replace(/\[(.*?)\][\[\(].*?[\]\)]/g, '$1') + .replace(/!?\[\[\S[^\[\]\|]*(?:\|([^\[\]]*))?\S\]\]/g, '$1') .replace(/^\s{0,3}>\s?/g, '') .replace(/(^|\n)\s{0,3}>\s?/g, '\n\n') .replace(/^\s{1,2}\[(.*?)\]: (\S+)( ".*?")?\s*$/g, '') diff --git a/assets/styles/base.scss b/assets/styles/base.scss index 6378f900..1b9b936e 100644 --- a/assets/styles/base.scss +++ b/assets/styles/base.scss @@ -569,7 +569,7 @@ header { font-size: 0.8rem; } - & > p { + & > p, & > a { margin: 0; font-weight: 400; user-select: none; From 0b6711c2185abbde7e95125b672ee8b5d827cb8b Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Sat, 14 May 2022 16:47:50 -0400 Subject: [PATCH 177/695] fix: tag boxes overlapping for content with many tags (closes #130) --- assets/styles/base.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/assets/styles/base.scss b/assets/styles/base.scss index 1b9b936e..de866fdb 100644 --- a/assets/styles/base.scss +++ b/assets/styles/base.scss @@ -186,6 +186,7 @@ article { & > li { display: inline-block; + margin: 0.4em 0; } & > li > a { border-radius: 8px; From 0439c163a03fc50487fbe1cbfc09dc38af7ed2f2 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Fri, 20 May 2022 16:50:56 -0400 Subject: [PATCH 178/695] fix: js not executing if spa disabled --- layouts/partials/head.html | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/layouts/partials/head.html b/layouts/partials/head.html index a5f23da3..a49800be 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -61,13 +61,7 @@ links, content, })) - - {{if $.Site.Data.config.enableSPA}} - {{ $router := resources.Get "js/router.js" | resources.Fingerprint "md5" | - resources.Minify }} - + {{if $.Site.Data.config.enableSPA}} + {{ $router := resources.Get "js/router.js" | resources.Fingerprint "md5" | + resources.Minify }} + {{else}} - + {{end}} {{ template "_internal/google_analytics.html" . }} From 0293c122177bf8c595cda8b4dfb513d90b1e6b03 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Mon, 23 May 2022 22:25:13 -0700 Subject: [PATCH 179/695] feat: recent posts section/partial --- assets/styles/base.scss | 61 +++++++++++++++++---------------- data/config.yaml | 1 + layouts/index.html | 3 ++ layouts/partials/page-list.html | 6 ++++ layouts/partials/recent.html | 12 +++++++ 5 files changed, 54 insertions(+), 29 deletions(-) create mode 100644 layouts/partials/recent.html diff --git a/assets/styles/base.scss b/assets/styles/base.scss index de866fdb..1c353f33 100644 --- a/assets/styles/base.scss +++ b/assets/styles/base.scss @@ -171,35 +171,6 @@ article { opacity: 0.7; } - & > .tags { - list-style: none; - padding-left: 0; - - & .meta { - & > h1 { - margin: 0; - } - & > p { - margin: 0; - } - } - - & > li { - display: inline-block; - margin: 0.4em 0; - } - & > li > a { - border-radius: 8px; - border: var(--outlinegray) 1px solid; - padding: 0.2em 0.5em; - &::before { - content: "#"; - margin-right: 0.3em; - color: var(--outlinegray); - } - } - } - & a { font-family: Source Sans Pro; font-weight: 600; @@ -223,6 +194,36 @@ article { } } +.tags { + list-style: none; + padding-left: 0; + + & .meta { + & > h1 { + margin: 0; + } + & > p { + margin: 0; + } + } + + & > li { + display: inline-block; + margin: 0.4em 0; + } + + & > li > a { + border-radius: 8px; + border: var(--outlinegray) 1px solid; + padding: 0.2em 0.5em; + &::before { + content: "#"; + margin-right: 0.3em; + color: var(--outlinegray); + } + } +} + .backlinks a { font-weight: 600; font-size: 0.9rem; @@ -590,3 +591,5 @@ header { padding: 0 1em; } } + + diff --git a/data/config.yaml b/data/config.yaml index 2b606e74..b79ad572 100644 --- a/data/config.yaml +++ b/data/config.yaml @@ -5,6 +5,7 @@ enableLinkPreview: true enableLatex: true enableSPA: true enableContextualBacklinks: true +enableRecentNotes: false description: Host your second brain and digital garden for free. Quartz features extremely fast full-text search, Wikilink support, backlinks, local graph, tags, and link previews. diff --git a/layouts/index.html b/layouts/index.html index 224c9978..8d1ffbd4 100644 --- a/layouts/index.html +++ b/layouts/index.html @@ -15,6 +15,9 @@
    {{partial "toc.html" .}} {{partial "textprocessing.html" . }} + {{if $.Site.Data.config.enableRecentNotes}} + {{partial "recent.html" . }} + {{end}}
    {{partial "footer.html" .}}
    diff --git a/layouts/partials/page-list.html b/layouts/partials/page-list.html index 6c2249ba..e51c5dda 100644 --- a/layouts/partials/page-list.html +++ b/layouts/partials/page-list.html @@ -4,11 +4,17 @@

    {{- .Title -}}

    +

    {{- .Summary -}}{{if .Truncated}}...{{end}}

    {{ .ReadingTime }} minute read. Last updated {{if ne .Date .Lastmod}}{{ .Lastmod.Format "January 2, 2006" }}{{else}}Unknown{{end}}

    +
    {{- end -}} diff --git a/layouts/partials/recent.html b/layouts/partials/recent.html new file mode 100644 index 00000000..e3926c24 --- /dev/null +++ b/layouts/partials/recent.html @@ -0,0 +1,12 @@ +
    +

    Recent Notes

    + + {{$notes := .Site.RegularPages}} + {{partial "page-list.html" (first 3 $notes)}} +
    + From bd316d8249f096c4d5616d682f142f49d4ca914f Mon Sep 17 00:00:00 2001 From: Aiden Bai Date: Fri, 27 May 2022 08:39:44 -0700 Subject: [PATCH 180/695] Bump million to 1.9.2 --- assets/js/router.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/assets/js/router.js b/assets/js/router.js index 81c25ac1..b70aac2d 100644 --- a/assets/js/router.js +++ b/assets/js/router.js @@ -1,12 +1,16 @@ -import { router, navigate } from "https://unpkg.com/million@1.8.9-0/dist/router.mjs" +import { router, navigate, reload, prefetch } from "https://unpkg.com/million@1.9.2/dist/router.mjs" export const attachSPARouting = (draw) => { - // SPA navigation for access later - window.navigate = navigate - // We only mutate document.title and content within .singlePage element + // Attach SPA functions to the global Million namespace + window.Million = { + router, + navigate, + reload, + prefetch, + }; router(".singlePage") // We need on initial load, then subsequent redirs // requestAnimationFrame() delays graph draw until SPA routing is finished - window.addEventListener("million:navigate", () => requestAnimationFrame(draw)) + reload(draw) window.addEventListener("DOMContentLoaded", () => requestAnimationFrame(draw)) } From efb6c7845f0a2743dd07b81f1d03b03d058ede0d Mon Sep 17 00:00:00 2001 From: Aiden Bai Date: Fri, 27 May 2022 08:40:00 -0700 Subject: [PATCH 181/695] Add prefetch to graph --- assets/js/graph.js | 205 +++++++++++++++---------------------- assets/js/search.js | 2 +- layouts/partials/head.html | 2 +- 3 files changed, 87 insertions(+), 122 deletions(-) diff --git a/assets/js/graph.js b/assets/js/graph.js index f71e44d3..c7634cf3 100644 --- a/assets/js/graph.js +++ b/assets/js/graph.js @@ -1,12 +1,5 @@ -async function drawGraph( - baseUrl, - pathColors, - depth, - enableDrag, - enableLegend, - enableZoom -) { - const container = document.getElementById('graph-container') +async function drawGraph(baseUrl, pathColors, depth, enableDrag, enableLegend, enableZoom) { + const container = document.getElementById("graph-container") const { index, links, content } = await fetchData // Use .pathname to remove hashes / searchParams / text fragments @@ -23,22 +16,19 @@ async function drawGraph( const copyLinks = JSON.parse(JSON.stringify(links)) const neighbours = new Set() - const wl = [curPage || '/', '__SENTINEL'] + const wl = [curPage || "/", "__SENTINEL"] if (depth >= 0) { while (depth >= 0 && wl.length > 0) { // compute neighbours const cur = wl.shift() - if (cur === '__SENTINEL') { + if (cur === "__SENTINEL") { depth-- - wl.push('__SENTINEL') + wl.push("__SENTINEL") } else { neighbours.add(cur) const outgoing = index.links[cur] || [] const incoming = index.backlinks[cur] || [] - wl.push( - ...outgoing.map((l) => l.target), - ...incoming.map((l) => l.source) - ) + wl.push(...outgoing.map((l) => l.target), ...incoming.map((l) => l.source)) } } } else { @@ -47,14 +37,12 @@ async function drawGraph( const data = { nodes: [...neighbours].map((id) => ({ id })), - links: copyLinks.filter( - (l) => neighbours.has(l.source) && neighbours.has(l.target) - ), + links: copyLinks.filter((l) => neighbours.has(l.source) && neighbours.has(l.target)), } const color = (d) => { - if (d.id === curPage || (d.id === '/' && curPage === '')) { - return 'var(--g-node-active)' + if (d.id === curPage || (d.id === "/" && curPage === "")) { + return "var(--g-node-active)" } for (const pathColor of pathColors) { @@ -65,7 +53,7 @@ async function drawGraph( } } - return 'var(--g-node)' + return "var(--g-node)" } const drag = (simulation) => { @@ -86,12 +74,12 @@ async function drawGraph( d.fy = null } - const noop = () => { } + const noop = () => {} return d3 .drag() - .on('start', enableDrag ? dragstarted : noop) - .on('drag', enableDrag ? dragged : noop) - .on('end', enableDrag ? dragended : noop) + .on("start", enableDrag ? dragstarted : noop) + .on("drag", enableDrag ? dragged : noop) + .on("end", enableDrag ? dragended : noop) } const height = Math.max(container.offsetHeight, 250) @@ -99,67 +87,58 @@ async function drawGraph( const simulation = d3 .forceSimulation(data.nodes) - .force('charge', d3.forceManyBody().strength(-30)) + .force("charge", d3.forceManyBody().strength(-30)) .force( - 'link', + "link", d3 .forceLink(data.links) .id((d) => d.id) - .distance(40) + .distance(40), ) - .force('center', d3.forceCenter()) + .force("center", d3.forceCenter()) const svg = d3 - .select('#graph-container') - .append('svg') - .attr('width', width) - .attr('height', height) - .attr('viewBox', [-width / 2, -height / 2, width, height]) + .select("#graph-container") + .append("svg") + .attr("width", width) + .attr("height", height) + .attr("viewBox", [-width / 2, -height / 2, width, height]) if (enableLegend) { - const legend = [ - { Current: 'var(--g-node-active)' }, - { Note: 'var(--g-node)' }, - ...pathColors, - ] + const legend = [{ Current: "var(--g-node-active)" }, { Note: "var(--g-node)" }, ...pathColors] legend.forEach((legendEntry, i) => { const key = Object.keys(legendEntry)[0] const colour = legendEntry[key] svg - .append('circle') - .attr('cx', -width / 2 + 20) - .attr('cy', height / 2 - 30 * (i + 1)) - .attr('r', 6) - .style('fill', colour) + .append("circle") + .attr("cx", -width / 2 + 20) + .attr("cy", height / 2 - 30 * (i + 1)) + .attr("r", 6) + .style("fill", colour) svg - .append('text') - .attr('x', -width / 2 + 40) - .attr('y', height / 2 - 30 * (i + 1)) + .append("text") + .attr("x", -width / 2 + 40) + .attr("y", height / 2 - 30 * (i + 1)) .text(key) - .style('font-size', '15px') - .attr('alignment-baseline', 'middle') + .style("font-size", "15px") + .attr("alignment-baseline", "middle") }) } // draw links between nodes const link = svg - .append('g') - .selectAll('line') + .append("g") + .selectAll("line") .data(data.links) - .join('line') - .attr('class', 'link') - .attr('stroke', 'var(--g-link)') - .attr('stroke-width', 2) - .attr('data-source', (d) => d.source.id) - .attr('data-target', (d) => d.target.id) + .join("line") + .attr("class", "link") + .attr("stroke", "var(--g-link)") + .attr("stroke-width", 2) + .attr("data-source", (d) => d.source.id) + .attr("data-target", (d) => d.target.id) // svg groups - const graphNode = svg - .append('g') - .selectAll('g') - .data(data.nodes) - .enter() - .append('g') + const graphNode = svg.append("g").selectAll("g").data(data.nodes).enter().append("g") // calculate radius const nodeRadius = (d) => { @@ -170,82 +149,68 @@ async function drawGraph( // draw individual nodes const node = graphNode - .append('circle') - .attr('class', 'node') - .attr('id', (d) => d.id) - .attr('r', nodeRadius) - .attr('fill', color) - .style('cursor', 'pointer') - .on('click', (_, d) => { + .append("circle") + .attr("class", "node") + .attr("id", (d) => d.id) + .attr("r", nodeRadius) + .attr("fill", color) + .style("cursor", "pointer") + .on("click", (_, d) => { // SPA navigation - window.navigate( - new URL(`${baseUrl}${decodeURI(d.id).replace(/\s+/g, '-')}/`), - '.singlePage' - ) + window.Million.navigate(new URL(`${baseUrl}${decodeURI(d.id).replace(/\s+/g, "-")}/`), ".singlePage") }) - .on('mouseover', function(_, d) { - d3.selectAll('.node') - .transition() - .duration(100) - .attr('fill', 'var(--g-node-inactive)') + .on("mouseover", function (_, d) { + d3.selectAll(".node").transition().duration(100).attr("fill", "var(--g-node-inactive)") const neighbours = parseIdsFromLinks([ ...(index.links[d.id] || []), ...(index.backlinks[d.id] || []), ]) - const neighbourNodes = d3 - .selectAll('.node') - .filter((d) => neighbours.includes(d.id)) + const neighbourNodes = d3.selectAll(".node").filter((d) => neighbours.includes(d.id)) const currentId = d.id + window.Million.prefetch(new URL(`${baseUrl}${decodeURI(d.id).replace(/\s+/g, "-")}/`)) const linkNodes = d3 - .selectAll('.link') + .selectAll(".link") .filter((d) => d.source.id === currentId || d.target.id === currentId) // highlight neighbour nodes - neighbourNodes.transition().duration(200).attr('fill', color) + neighbourNodes.transition().duration(200).attr("fill", color) // highlight links - linkNodes - .transition() - .duration(200) - .attr('stroke', 'var(--g-link-active)') + linkNodes.transition().duration(200).attr("stroke", "var(--g-link-active)") // show text for self d3.select(this.parentNode) .raise() - .select('text') + .select("text") .transition() .duration(200) - .style('opacity', 1) + .style("opacity", 1) }) - .on('mouseleave', function(_, d) { - d3.selectAll('.node').transition().duration(200).attr('fill', color) + .on("mouseleave", function (_, d) { + d3.selectAll(".node").transition().duration(200).attr("fill", color) const currentId = d.id const linkNodes = d3 - .selectAll('.link') + .selectAll(".link") .filter((d) => d.source.id === currentId || d.target.id === currentId) - linkNodes.transition().duration(200).attr('stroke', 'var(--g-link)') + linkNodes.transition().duration(200).attr("stroke", "var(--g-link)") - d3.select(this.parentNode) - .select('text') - .transition() - .duration(200) - .style('opacity', 0) + d3.select(this.parentNode).select("text").transition().duration(200).style("opacity", 0) }) .call(drag(simulation)) // draw labels const labels = graphNode - .append('text') - .attr('dx', 0) - .attr('dy', (d) => nodeRadius(d) + 8 + 'px') - .attr('text-anchor', 'middle') - .text((d) => content[d.id]?.title || d.id.replace('-', ' ')) - .style('opacity', 0) - .style('pointer-events', 'none') - .style('font-size', '0.4em') + .append("text") + .attr("dx", 0) + .attr("dy", (d) => nodeRadius(d) + 8 + "px") + .attr("text-anchor", "middle") + .text((d) => content[d.id]?.title || d.id.replace("-", " ")) + .style("opacity", 0) + .style("pointer-events", "none") + .style("font-size", "0.4em") .raise() .call(drag(simulation)) @@ -260,24 +225,24 @@ async function drawGraph( [width, height], ]) .scaleExtent([0.25, 4]) - .on('zoom', ({ transform }) => { - link.attr('transform', transform) - node.attr('transform', transform) + .on("zoom", ({ transform }) => { + link.attr("transform", transform) + node.attr("transform", transform) const scale = transform.k const scaledOpacity = Math.max((scale - 1) / 3.75, 0) - labels.attr('transform', transform).style('opacity', scaledOpacity) - }) + labels.attr("transform", transform).style("opacity", scaledOpacity) + }), ) } // progress the simulation - simulation.on('tick', () => { + simulation.on("tick", () => { link - .attr('x1', (d) => d.source.x) - .attr('y1', (d) => d.source.y) - .attr('x2', (d) => d.target.x) - .attr('y2', (d) => d.target.y) - node.attr('cx', (d) => d.x).attr('cy', (d) => d.y) - labels.attr('x', (d) => d.x).attr('y', (d) => d.y) + .attr("x1", (d) => d.source.x) + .attr("y1", (d) => d.source.y) + .attr("x2", (d) => d.target.x) + .attr("y2", (d) => d.target.y) + node.attr("cx", (d) => d.x).attr("cy", (d) => d.y) + labels.attr("x", (d) => d.x).attr("y", (d) => d.y) }) } diff --git a/assets/js/search.js b/assets/js/search.js index bb94cd30..ee006471 100644 --- a/assets/js/search.js +++ b/assets/js/search.js @@ -153,7 +153,7 @@ const highlight = (content, term) => { const redir = (id, term) => { // SPA navigation - window.navigate( + window.Million.navigate( new URL( `${BASE_URL.replace(/\/$/g, "")}${id}#:~:text=${encodeURIComponent(term)}/` ), diff --git a/layouts/partials/head.html b/layouts/partials/head.html index a49800be..b65bb843 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -107,7 +107,7 @@ {{else}} {{end}} From bc32bbeaed10eac3094fcaa899ca626dc8e56771 Mon Sep 17 00:00:00 2001 From: Aiden Bai Date: Fri, 27 May 2022 09:02:01 -0700 Subject: [PATCH 182/695] Bump milliomn to 1.9.3 --- assets/js/router.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/js/router.js b/assets/js/router.js index b70aac2d..dff17413 100644 --- a/assets/js/router.js +++ b/assets/js/router.js @@ -1,4 +1,4 @@ -import { router, navigate, reload, prefetch } from "https://unpkg.com/million@1.9.2/dist/router.mjs" +import { router, navigate, reload, prefetch } from "https://unpkg.com/million@1.9.3/dist/router.mjs" export const attachSPARouting = (draw) => { // Attach SPA functions to the global Million namespace From e0fd9570d746cb2aa270dbe64dae038fc02bdbac Mon Sep 17 00:00:00 2001 From: Aiden Bai Date: Fri, 27 May 2022 09:49:28 -0700 Subject: [PATCH 183/695] Bump million to 1.9.4 --- assets/js/router.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/js/router.js b/assets/js/router.js index dff17413..3cd33500 100644 --- a/assets/js/router.js +++ b/assets/js/router.js @@ -1,4 +1,4 @@ -import { router, navigate, reload, prefetch } from "https://unpkg.com/million@1.9.3/dist/router.mjs" +import { router, navigate, reload, prefetch } from "https://unpkg.com/million@1.9.4/dist/router.mjs" export const attachSPARouting = (draw) => { // Attach SPA functions to the global Million namespace From 683cb53cbd4d581a061b64a26da54285ef479e19 Mon Sep 17 00:00:00 2001 From: Aiden Bai Date: Fri, 27 May 2022 13:19:19 -0700 Subject: [PATCH 184/695] Bump million to 1.9.5 --- assets/js/router.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/js/router.js b/assets/js/router.js index 3cd33500..278ed565 100644 --- a/assets/js/router.js +++ b/assets/js/router.js @@ -1,4 +1,4 @@ -import { router, navigate, reload, prefetch } from "https://unpkg.com/million@1.9.4/dist/router.mjs" +import { router, navigate, reload, prefetch } from "https://unpkg.com/million@1.9.5/dist/router.mjs" export const attachSPARouting = (draw) => { // Attach SPA functions to the global Million namespace From 44984cdaf4dfca8c25e9b73066ee22c775ed6d2e Mon Sep 17 00:00:00 2001 From: Aiden Bai Date: Fri, 27 May 2022 13:27:13 -0700 Subject: [PATCH 185/695] Add support for progress bar --- assets/styles/custom.scss | 2 ++ 1 file changed, 2 insertions(+) diff --git a/assets/styles/custom.scss b/assets/styles/custom.scss index 612b80a6..0a23ffca 100644 --- a/assets/styles/custom.scss +++ b/assets/styles/custom.scss @@ -9,6 +9,7 @@ --gray: #4e4e4e; --lightgray: #f0f0f0; --outlinegray: #dadada; + --million-progress-bar-color: var(--secondary); } [saved-theme="dark"] { @@ -21,4 +22,5 @@ --gray: #d4d4d4 !important; --lightgray: #292633 !important; --outlinegray: #343434 !important; + --million-progress-bar-color: var(--secondary) !important; } \ No newline at end of file From 159deabfe160c7570679269873f18776cb586437 Mon Sep 17 00:00:00 2001 From: Aiden Bai Date: Fri, 27 May 2022 16:14:17 -0700 Subject: [PATCH 186/695] Bump to 1.9.6 --- assets/js/router.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/js/router.js b/assets/js/router.js index 278ed565..787cd765 100644 --- a/assets/js/router.js +++ b/assets/js/router.js @@ -1,4 +1,4 @@ -import { router, navigate, reload, prefetch } from "https://unpkg.com/million@1.9.5/dist/router.mjs" +import { router, navigate, reload, prefetch } from "https://unpkg.com/million@1.9.6/dist/router.mjs" export const attachSPARouting = (draw) => { // Attach SPA functions to the global Million namespace From ae240ff82cd8de66c28b1608e72db6ed397cab13 Mon Sep 17 00:00:00 2001 From: Aiden Bai Date: Fri, 27 May 2022 18:31:36 -0700 Subject: [PATCH 187/695] Remove redundant CSS rule --- assets/styles/custom.scss | 1 - 1 file changed, 1 deletion(-) diff --git a/assets/styles/custom.scss b/assets/styles/custom.scss index 0a23ffca..54dbacef 100644 --- a/assets/styles/custom.scss +++ b/assets/styles/custom.scss @@ -22,5 +22,4 @@ --gray: #d4d4d4 !important; --lightgray: #292633 !important; --outlinegray: #343434 !important; - --million-progress-bar-color: var(--secondary) !important; } \ No newline at end of file From 8aba612a0013e84f0b3f9d60863c02ad1b0bfd6e Mon Sep 17 00:00:00 2001 From: Aiden Bai Date: Fri, 27 May 2022 18:42:01 -0700 Subject: [PATCH 188/695] Fix non-spa fallback --- layouts/partials/head.html | 58 +++++++++++++++----------------------- 1 file changed, 23 insertions(+), 35 deletions(-) diff --git a/layouts/partials/head.html b/layouts/partials/head.html index b65bb843..2da259d4 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -5,45 +5,31 @@ name="description" content="{{if .IsHome}}{{$.Site.Data.config.description}}{{else}}{{.Summary}}{{end}}" /> - - {{ if .Title }}{{ .Title }}{{ else }}{{ $.Site.Data.config.page_title }}{{ - end }} - + {{ if .Title }}{{ .Title }}{{ else }}{{ $.Site.Data.config.page_title }}{{ end }} - + - {{$sass := resources.Match "styles/[!_]*.scss" }} - {{$css := slice }} - {{range $sass}} - {{$scss := . | resources.ToCSS (dict "outputStyle" "compressed") }} - {{$css = $css | append $scss}} - {{end}} - {{$finalCss := $css | resources.Concat "styles.css" | resources.Fingerprint "md5" | resources.Minify }} + {{$sass := resources.Match "styles/[!_]*.scss" }} {{$css := slice }} {{range $sass}} {{$scss := . + | resources.ToCSS (dict "outputStyle" "compressed") }} {{$css = $css | append $scss}} {{end}} + {{$finalCss := $css | resources.Concat "styles.css" | resources.Fingerprint "md5" | + resources.Minify }} - {{ $darkMode := resources.Get "js/darkmode.js" | resources.Fingerprint "md5" | - resources.Minify }} + {{ $darkMode := resources.Get "js/darkmode.js" | resources.Fingerprint "md5" | resources.Minify }} - {{partial "katex.html" .}} - - {{ $popover := resources.Get "js/popover.js" | resources.Fingerprint "md5" | - resources.Minify }} + {{partial "katex.html" .}} {{ $popover := resources.Get "js/popover.js" | resources.Fingerprint + "md5" | resources.Minify }} - {{$linkIndex := resources.Get "indices/linkIndex.json" | resources.Fingerprint - "md5" | resources.Minify | }} {{$contentIndex := resources.Get - "indices/contentIndex.json" | resources.Fingerprint "md5" | resources.Minify - }} + {{$linkIndex := resources.Get "indices/linkIndex.json" | resources.Fingerprint "md5" | + resources.Minify | }} {{$contentIndex := resources.Get "indices/contentIndex.json" | + resources.Fingerprint "md5" | resources.Minify }} - {{if $.Site.Data.config.enableSPA}} - {{ $router := resources.Get "js/router.js" | resources.Fingerprint "md5" | - resources.Minify }} + {{if $.Site.Data.config.enableSPA}} {{ $router := resources.Get "js/router.js" | + resources.Fingerprint "md5" | resources.Minify }} {{else}} {{end}} From 006b74ec6feed2d01099754c888bac4a9474a6b1 Mon Sep 17 00:00:00 2001 From: Aiden Bai Date: Fri, 27 May 2022 18:45:42 -0700 Subject: [PATCH 189/695] Fix formatting --- layouts/partials/head.html | 40 +++++++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/layouts/partials/head.html b/layouts/partials/head.html index 2da259d4..25120d51 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -5,31 +5,44 @@ name="description" content="{{if .IsHome}}{{$.Site.Data.config.description}}{{else}}{{.Summary}}{{end}}" /> - {{ if .Title }}{{ .Title }}{{ else }}{{ $.Site.Data.config.page_title }}{{ end }} + + {{ if .Title }}{{ .Title }}{{ else }}{{ $.Site.Data.config.page_title }}{{ + end }} + - + - {{$sass := resources.Match "styles/[!_]*.scss" }} {{$css := slice }} {{range $sass}} {{$scss := . - | resources.ToCSS (dict "outputStyle" "compressed") }} {{$css = $css | append $scss}} {{end}} - {{$finalCss := $css | resources.Concat "styles.css" | resources.Fingerprint "md5" | - resources.Minify }} + {{$sass := resources.Match "styles/[!_]*.scss" }} + {{$css := slice }} + {{range $sass}} + {{$scss := . | resources.ToCSS (dict "outputStyle" "compressed") }} + {{$css = $css | append $scss}} + {{end}} + {{$finalCss := $css | resources.Concat "styles.css" | resources.Fingerprint "md5" | resources.Minify }} {{ $darkMode := resources.Get "js/darkmode.js" | resources.Fingerprint "md5" | resources.Minify }} - {{partial "katex.html" .}} {{ $popover := resources.Get "js/popover.js" | resources.Fingerprint - "md5" | resources.Minify }} + {{partial "katex.html" .}} + + {{ $popover := resources.Get "js/popover.js" | resources.Fingerprint "md5" | + resources.Minify }} - {{$linkIndex := resources.Get "indices/linkIndex.json" | resources.Fingerprint "md5" | - resources.Minify | }} {{$contentIndex := resources.Get "indices/contentIndex.json" | - resources.Fingerprint "md5" | resources.Minify }} + {{$linkIndex := resources.Get "indices/linkIndex.json" | resources.Fingerprint + "md5" | resources.Minify | }} {{$contentIndex := resources.Get + "indices/contentIndex.json" | resources.Fingerprint "md5" | resources.Minify + }} - {{if $.Site.Data.config.enableSPA}} {{ $router := resources.Get "js/router.js" | - resources.Fingerprint "md5" | resources.Minify }} + {{if $.Site.Data.config.enableSPA}} + {{ $router := resources.Get "js/router.js" | resources.Fingerprint "md5" | + resources.Minify }} {{else}} {{end}} From 5a1fbc937470b4f43b318dd0fa9af01b4a47b188 Mon Sep 17 00:00:00 2001 From: DhammaCharts <100090806+DhammaCharts@users.noreply.github.com> Date: Wed, 1 Jun 2022 13:49:27 +0100 Subject: [PATCH 192/695] Improve graph display, options and ability to have a global graph on the home page, local graphs on subpage. --- assets/js/graph.js | 43 +++++++++++++++++++++++------- data/graphConfig.yaml | 33 +++++++++++++++++++++-- layouts/index.html | 2 +- layouts/partials/footerIndex.html | 28 ++++++++++++++++++++ layouts/partials/head.html | 44 +++++++++++++++++++++++++------ 5 files changed, 129 insertions(+), 21 deletions(-) create mode 100644 layouts/partials/footerIndex.html diff --git a/assets/js/graph.js b/assets/js/graph.js index c7634cf3..48248eca 100644 --- a/assets/js/graph.js +++ b/assets/js/graph.js @@ -1,4 +1,16 @@ -async function drawGraph(baseUrl, pathColors, depth, enableDrag, enableLegend, enableZoom) { +async function drawGraph( + baseUrl, + pathColors, + depth, + enableDrag, + enableLegend, + enableZoom, + isHome, + opacityScale, + scale, + repelForce, + fontSize +) { const container = document.getElementById("graph-container") const { index, links, content } = await fetchData @@ -82,12 +94,12 @@ async function drawGraph(baseUrl, pathColors, depth, enableDrag, enableLegend, e .on("end", enableDrag ? dragended : noop) } - const height = Math.max(container.offsetHeight, 250) + const height = Math.max(container.offsetHeight, isHome ? 500 : 250) const width = container.offsetWidth const simulation = d3 .forceSimulation(data.nodes) - .force("charge", d3.forceManyBody().strength(-30)) + .force("charge", d3.forceManyBody().strength(-100 * repelForce)) .force( "link", d3 @@ -102,7 +114,7 @@ async function drawGraph(baseUrl, pathColors, depth, enableDrag, enableLegend, e .append("svg") .attr("width", width) .attr("height", height) - .attr("viewBox", [-width / 2, -height / 2, width, height]) + .attr('viewBox', [-width / 2 * 1 / scale, -height / 2 * 1 / scale, width * 1 / scale, height * 1 / scale]) if (enableLegend) { const legend = [{ Current: "var(--g-node-active)" }, { Note: "var(--g-node)" }, ...pathColors] @@ -168,7 +180,7 @@ async function drawGraph(baseUrl, pathColors, depth, enableDrag, enableLegend, e ]) const neighbourNodes = d3.selectAll(".node").filter((d) => neighbours.includes(d.id)) const currentId = d.id - window.Million.prefetch(new URL(`${baseUrl}${decodeURI(d.id).replace(/\s+/g, "-")}/`)) + // window.Million.prefetch(new URL(`${baseUrl}${decodeURI(d.id).replace(/\s+/g, "-")}/`)) const linkNodes = d3 .selectAll(".link") .filter((d) => d.source.id === currentId || d.target.id === currentId) @@ -179,13 +191,18 @@ async function drawGraph(baseUrl, pathColors, depth, enableDrag, enableLegend, e // highlight links linkNodes.transition().duration(200).attr("stroke", "var(--g-link-active)") + const bigFont = fontSize+0.5 + // show text for self d3.select(this.parentNode) .raise() .select("text") .transition() .duration(200) - .style("opacity", 1) + .attr('opacityOld', d3.select(this.parentNode).select('text').style("opacity")) + .style('opacity', 1) + .style('font-size', bigFont+'em') + .attr('dy', d => nodeRadius(d) + 20 + 'px') // radius is in px }) .on("mouseleave", function (_, d) { d3.selectAll(".node").transition().duration(200).attr("fill", color) @@ -197,7 +214,13 @@ async function drawGraph(baseUrl, pathColors, depth, enableDrag, enableLegend, e linkNodes.transition().duration(200).attr("stroke", "var(--g-link)") - d3.select(this.parentNode).select("text").transition().duration(200).style("opacity", 0) + d3.select(this.parentNode) + .select("text") + .transition() + .duration(200) + .style('opacity', d3.select(this.parentNode).select('text').attr("opacityOld")) + .style('font-size', fontSize+'em') + .attr('dy', d => nodeRadius(d) + 8 + 'px') // radius is in px }) .call(drag(simulation)) @@ -208,9 +231,9 @@ async function drawGraph(baseUrl, pathColors, depth, enableDrag, enableLegend, e .attr("dy", (d) => nodeRadius(d) + 8 + "px") .attr("text-anchor", "middle") .text((d) => content[d.id]?.title || d.id.replace("-", " ")) - .style("opacity", 0) + .style('opacity', (opacityScale - 1) / 3.75) .style("pointer-events", "none") - .style("font-size", "0.4em") + .style('font-size', fontSize+'em') .raise() .call(drag(simulation)) @@ -228,7 +251,7 @@ async function drawGraph(baseUrl, pathColors, depth, enableDrag, enableLegend, e .on("zoom", ({ transform }) => { link.attr("transform", transform) node.attr("transform", transform) - const scale = transform.k + const scale = transform.k * opacityScale; const scaledOpacity = Math.max((scale - 1) / 3.75, 0) labels.attr("transform", transform).style("opacity", scaledOpacity) }), diff --git a/data/graphConfig.yaml b/data/graphConfig.yaml index 3f8d3fb6..7f08130d 100644 --- a/data/graphConfig.yaml +++ b/data/graphConfig.yaml @@ -1,6 +1,35 @@ +# if true, a Global Graph will be shown on home page with full width, no backlink. +# A different set of Local Graphs will be shown on sub pages. +# if false, Local Graph will be default on every page as usual +enableGlobalGraph: true + +### Local Graph ### + enableLegend: false enableDrag: true enableZoom: true -depth: -1 # set to -1 to show full graph +depth: 1 # set to -1 to show full graph +scale: 1 +repelForce: 2 +centerForce: 1 +linkDistance: 1 +fontSize: 0.6 +opacityScale: 3 + +### Global Graph ### + +enableLegendGG: false +enableDragGG: true +enableZoomGG: true +depthGG: -1 # set to -1 to show full graph +scaleGG: 1.2 +repelForceGG: 1 +centerForceGG: 1 +linkDistanceGG: 1 +fontSizeGG: 0.5 +opacityScaleGG: 3 + +### Graphs ### + paths: - - /moc: "#4388cc" \ No newline at end of file + - /moc: "#4388cc" diff --git a/layouts/index.html b/layouts/index.html index 8d1ffbd4..50536142 100644 --- a/layouts/index.html +++ b/layouts/index.html @@ -19,7 +19,7 @@ {{partial "recent.html" . }} {{end}} - {{partial "footer.html" .}} + {{partial "footerIndex.html" .}} diff --git a/layouts/partials/footerIndex.html b/layouts/partials/footerIndex.html new file mode 100644 index 00000000..36c8a8ac --- /dev/null +++ b/layouts/partials/footerIndex.html @@ -0,0 +1,28 @@ + + +
    + +{{if $.Site.Data.config.enableFooter}} + {{if $.Site.Data.graphConfig.enableGlobalGraph}} +
    + +
    + {{partial "graph.html" .}} +
    + +
    + {{else}} +
    +
    + +
    + {{partial "graph.html" .}} +
    + +
    + {{end}} +{{end}} + +{{partial "contact.html" .}} diff --git a/layouts/partials/head.html b/layouts/partials/head.html index f10ce145..01b8fe8a 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -62,6 +62,12 @@ })) const draw = () => { + + const siteBaseURL = new URL({{$.Site.BaseURL}}); + const pathBase = siteBaseURL.pathname; + const pathWindow = window.location.pathname; + const isHome = pathBase == pathWindow ? true : false; + // NOTE: everything within this callback will be executed for every page navigation. This is a good place to put JavaScript that loads or modifies data on the page. {{if $.Site.Data.config.enableFooter}} const container = document.getElementById("graph-container") @@ -70,14 +76,36 @@ // clear the graph in case there is anything within it container.textContent = "" - drawGraph( - {{strings.TrimRight "/" .Site.BaseURL}}, - {{$.Site.Data.graphConfig.paths}}, - {{$.Site.Data.graphConfig.depth}}, - {{$.Site.Data.graphConfig.enableDrag}}, - {{$.Site.Data.graphConfig.enableLegend}}, - {{$.Site.Data.graphConfig.enableZoom}} - ); + if (isHome && {{$.Site.Data.graphConfig.enableGlobalGraph}}) { + drawGraph( + {{strings.TrimRight "/" .Site.BaseURL}}, + {{$.Site.Data.graphConfig.paths}}, + {{$.Site.Data.graphConfig.depthGG}}, + {{$.Site.Data.graphConfig.enableDragGG}}, + {{$.Site.Data.graphConfig.enableLegendGG}}, + {{$.Site.Data.graphConfig.enableZoomGG}}, + true, + {{$.Site.Data.graphConfig.opacityScaleGG}}, + {{$.Site.Data.graphConfig.scaleGG}}, + {{$.Site.Data.graphConfig.repelForceGG}}, + {{$.Site.Data.graphConfig.fontSizeGG}} + ); + } else { + drawGraph( + {{strings.TrimRight "/" .Site.BaseURL}}, + {{$.Site.Data.graphConfig.paths}}, + {{$.Site.Data.graphConfig.depth}}, + {{$.Site.Data.graphConfig.enableDrag}}, + {{$.Site.Data.graphConfig.enableLegend}}, + {{$.Site.Data.graphConfig.enableZoom}}, + false, + {{$.Site.Data.graphConfig.opacityScale}}, + {{$.Site.Data.graphConfig.scale}}, + {{$.Site.Data.graphConfig.repelForce}}, + {{$.Site.Data.graphConfig.fontSize}} + ); + } + {{end}} {{if $.Site.Data.config.enableLinkPreview}} initPopover( From 1e237ef677f3b958597460175269eed4b0638112 Mon Sep 17 00:00:00 2001 From: DhammaCharts <100090806+DhammaCharts@users.noreply.github.com> Date: Wed, 1 Jun 2022 20:15:44 +0100 Subject: [PATCH 193/695] change baseURL --- config.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config.toml b/config.toml index 5efa9f34..6a783812 100644 --- a/config.toml +++ b/config.toml @@ -1,4 +1,4 @@ -baseURL = "https://quartz.jzhao.xyz/" +baseURL = "https://dhammacharts.org/quartz/" languageCode = "en-us" googleAnalytics = "G-XYFD95KB4J" pygmentsUseClasses = true @@ -30,4 +30,4 @@ enableGitInfo = true tabWidth = 4 [frontmatter] lastmod = ["lastmod", ":git", "date", "publishDate"] - publishDate = ["publishDate", "date"] \ No newline at end of file + publishDate = ["publishDate", "date"] From 19606ba63d15edd1e4a98bf1ce5cd510a24880e0 Mon Sep 17 00:00:00 2001 From: DhammaCharts <100090806+DhammaCharts@users.noreply.github.com> Date: Wed, 1 Jun 2022 21:19:03 +0100 Subject: [PATCH 194/695] add www. --- config.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.toml b/config.toml index 6a783812..65ffb1f2 100644 --- a/config.toml +++ b/config.toml @@ -1,4 +1,4 @@ -baseURL = "https://dhammacharts.org/quartz/" +baseURL = "https://www.dhammacharts.org/quartz/" languageCode = "en-us" googleAnalytics = "G-XYFD95KB4J" pygmentsUseClasses = true From e809896338b51e65ca862809e79884469476f2de Mon Sep 17 00:00:00 2001 From: DhammaCharts <100090806+DhammaCharts@users.noreply.github.com> Date: Wed, 1 Jun 2022 21:22:31 +0100 Subject: [PATCH 195/695] increase scale --- data/graphConfig.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/graphConfig.yaml b/data/graphConfig.yaml index 7f08130d..f8b9941d 100644 --- a/data/graphConfig.yaml +++ b/data/graphConfig.yaml @@ -9,7 +9,7 @@ enableLegend: false enableDrag: true enableZoom: true depth: 1 # set to -1 to show full graph -scale: 1 +scale: 1.2 repelForce: 2 centerForce: 1 linkDistance: 1 @@ -22,7 +22,7 @@ enableLegendGG: false enableDragGG: true enableZoomGG: true depthGG: -1 # set to -1 to show full graph -scaleGG: 1.2 +scaleGG: 1.4 repelForceGG: 1 centerForceGG: 1 linkDistanceGG: 1 From ac0dd50c048d68884b0ada42e3ab0476fb29ef65 Mon Sep 17 00:00:00 2001 From: DhammaCharts <100090806+DhammaCharts@users.noreply.github.com> Date: Wed, 1 Jun 2022 21:30:40 +0100 Subject: [PATCH 196/695] uncomment window.Million --- assets/js/graph.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/js/graph.js b/assets/js/graph.js index 48248eca..87d8d586 100644 --- a/assets/js/graph.js +++ b/assets/js/graph.js @@ -180,7 +180,7 @@ async function drawGraph( ]) const neighbourNodes = d3.selectAll(".node").filter((d) => neighbours.includes(d.id)) const currentId = d.id - // window.Million.prefetch(new URL(`${baseUrl}${decodeURI(d.id).replace(/\s+/g, "-")}/`)) + window.Million.prefetch(new URL(`${baseUrl}${decodeURI(d.id).replace(/\s+/g, "-")}/`)) const linkNodes = d3 .selectAll(".link") .filter((d) => d.source.id === currentId || d.target.id === currentId) From c0800a874980ab0f24fc2e350d70792d9c7f2956 Mon Sep 17 00:00:00 2001 From: DhammaCharts <100090806+DhammaCharts@users.noreply.github.com> Date: Thu, 2 Jun 2022 07:45:44 +0100 Subject: [PATCH 197/695] change baseURL back to original --- config.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.toml b/config.toml index 65ffb1f2..803ef1ec 100644 --- a/config.toml +++ b/config.toml @@ -1,4 +1,4 @@ -baseURL = "https://www.dhammacharts.org/quartz/" +baseURL = "https://quartz.jzhao.xyz/" languageCode = "en-us" googleAnalytics = "G-XYFD95KB4J" pygmentsUseClasses = true From d261655d96f9ed084a176ed113b0d11f1351c6de Mon Sep 17 00:00:00 2001 From: DhammaCharts <100090806+DhammaCharts@users.noreply.github.com> Date: Thu, 2 Jun 2022 07:49:09 +0100 Subject: [PATCH 198/695] remove unnecessary ternary --- layouts/partials/head.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/layouts/partials/head.html b/layouts/partials/head.html index 01b8fe8a..b56c2913 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -66,7 +66,7 @@ const siteBaseURL = new URL({{$.Site.BaseURL}}); const pathBase = siteBaseURL.pathname; const pathWindow = window.location.pathname; - const isHome = pathBase == pathWindow ? true : false; + const isHome = pathBase == pathWindow; // NOTE: everything within this callback will be executed for every page navigation. This is a good place to put JavaScript that loads or modifies data on the page. {{if $.Site.Data.config.enableFooter}} From c88f31c3645bb0002171bf21850c7ca6d217c73f Mon Sep 17 00:00:00 2001 From: DhammaCharts <100090806+DhammaCharts@users.noreply.github.com> Date: Thu, 2 Jun 2022 08:16:02 +0100 Subject: [PATCH 199/695] change to object destructuring for drawGraph() arguments --- assets/js/graph.js | 11 +++++----- data/graphConfig.yaml | 44 ++++++++++++++++++++------------------ layouts/partials/head.html | 22 ++++--------------- 3 files changed, 32 insertions(+), 45 deletions(-) diff --git a/assets/js/graph.js b/assets/js/graph.js index 87d8d586..9199bef8 100644 --- a/assets/js/graph.js +++ b/assets/js/graph.js @@ -1,16 +1,15 @@ -async function drawGraph( - baseUrl, - pathColors, +async function drawGraph(baseUrl,isHome,pathColors,graphConfig) { + + let { depth, enableDrag, enableLegend, enableZoom, - isHome, opacityScale, scale, repelForce, - fontSize -) { + fontSize} = graphConfig; + const container = document.getElementById("graph-container") const { index, links, content } = await fetchData diff --git a/data/graphConfig.yaml b/data/graphConfig.yaml index f8b9941d..06ce2b08 100644 --- a/data/graphConfig.yaml +++ b/data/graphConfig.yaml @@ -5,31 +5,33 @@ enableGlobalGraph: true ### Local Graph ### -enableLegend: false -enableDrag: true -enableZoom: true -depth: 1 # set to -1 to show full graph -scale: 1.2 -repelForce: 2 -centerForce: 1 -linkDistance: 1 -fontSize: 0.6 -opacityScale: 3 +localGraph: + enableLegend: false + enableDrag: true + enableZoom: true + depth: 1 # set to -1 to show full graph + scale: 1.2 + repelForce: 2 + centerForce: 1 + linkDistance: 1 + fontSize: 0.6 + opacityScale: 3 ### Global Graph ### -enableLegendGG: false -enableDragGG: true -enableZoomGG: true -depthGG: -1 # set to -1 to show full graph -scaleGG: 1.4 -repelForceGG: 1 -centerForceGG: 1 -linkDistanceGG: 1 -fontSizeGG: 0.5 -opacityScaleGG: 3 +globalGraph: + enableLegend: false + enableDrag: true + enableZoom: true + depth: -1 # set to -1 to show full graph + scale: 1.4 + repelForce: 1 + centerForce: 1 + linkDistance: 1 + fontSize: 0.5 + opacityScale: 3 -### Graphs ### +### For all graphs ### paths: - /moc: "#4388cc" diff --git a/layouts/partials/head.html b/layouts/partials/head.html index b56c2913..ba02260e 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -79,30 +79,16 @@ if (isHome && {{$.Site.Data.graphConfig.enableGlobalGraph}}) { drawGraph( {{strings.TrimRight "/" .Site.BaseURL}}, - {{$.Site.Data.graphConfig.paths}}, - {{$.Site.Data.graphConfig.depthGG}}, - {{$.Site.Data.graphConfig.enableDragGG}}, - {{$.Site.Data.graphConfig.enableLegendGG}}, - {{$.Site.Data.graphConfig.enableZoomGG}}, true, - {{$.Site.Data.graphConfig.opacityScaleGG}}, - {{$.Site.Data.graphConfig.scaleGG}}, - {{$.Site.Data.graphConfig.repelForceGG}}, - {{$.Site.Data.graphConfig.fontSizeGG}} + {{$.Site.Data.graphConfig.paths}}, + {{$.Site.Data.graphConfig.globalGraph}} ); } else { drawGraph( {{strings.TrimRight "/" .Site.BaseURL}}, - {{$.Site.Data.graphConfig.paths}}, - {{$.Site.Data.graphConfig.depth}}, - {{$.Site.Data.graphConfig.enableDrag}}, - {{$.Site.Data.graphConfig.enableLegend}}, - {{$.Site.Data.graphConfig.enableZoom}}, false, - {{$.Site.Data.graphConfig.opacityScale}}, - {{$.Site.Data.graphConfig.scale}}, - {{$.Site.Data.graphConfig.repelForce}}, - {{$.Site.Data.graphConfig.fontSize}} + {{$.Site.Data.graphConfig.paths}}, + {{$.Site.Data.graphConfig.localGraph}} ); } From a275123be2b1d528dbde23beb9880933c4e22c3e Mon Sep 17 00:00:00 2001 From: DhammaCharts <100090806+DhammaCharts@users.noreply.github.com> Date: Thu, 2 Jun 2022 08:35:28 +0100 Subject: [PATCH 200/695] better font behaviour --- assets/js/graph.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/js/graph.js b/assets/js/graph.js index 9199bef8..f79cb3fa 100644 --- a/assets/js/graph.js +++ b/assets/js/graph.js @@ -190,7 +190,7 @@ async function drawGraph(baseUrl,isHome,pathColors,graphConfig) { // highlight links linkNodes.transition().duration(200).attr("stroke", "var(--g-link-active)") - const bigFont = fontSize+0.5 + const bigFont = fontSize*1.5 // show text for self d3.select(this.parentNode) From ab809249c8f57c1980de2fa850eef66301619307 Mon Sep 17 00:00:00 2001 From: DhammaCharts <100090806+DhammaCharts@users.noreply.github.com> Date: Mon, 6 Jun 2022 16:42:53 +0100 Subject: [PATCH 201/695] Update layouts/partials/head.html Co-authored-by: Jacky Zhao --- layouts/partials/head.html | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/layouts/partials/head.html b/layouts/partials/head.html index 6eb8eaf3..b3ad28d8 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -72,21 +72,13 @@ // clear the graph in case there is anything within it container.textContent = "" - if (isHome && {{$.Site.Data.graphConfig.enableGlobalGraph}}) { - drawGraph( + const drawGlobal = isHome && {{$.Site.Data.graphConfig.enableGlobalGraph}}; + drawGraph( {{strings.TrimRight "/" .Site.BaseURL}}, - true, + drawGlobal, {{$.Site.Data.graphConfig.paths}}, - {{$.Site.Data.graphConfig.globalGraph}} + drawGlobal ? {{$.Site.Data.graphConfig.globalGraph}} : {{$.Site.Data.graphConfig.localGraph}} ); - } else { - drawGraph( - {{strings.TrimRight "/" .Site.BaseURL}}, - false, - {{$.Site.Data.graphConfig.paths}}, - {{$.Site.Data.graphConfig.localGraph}} - ); - } {{end}} From 69c74ca6b5854cbb3e7dd895dca0539f51f49720 Mon Sep 17 00:00:00 2001 From: DhammaCharts <100090806+DhammaCharts@users.noreply.github.com> Date: Mon, 6 Jun 2022 16:48:16 +0100 Subject: [PATCH 202/695] minor adjustment --- assets/js/graph.js | 2 +- layouts/partials/footerIndex.html | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/assets/js/graph.js b/assets/js/graph.js index f79cb3fa..174d4946 100644 --- a/assets/js/graph.js +++ b/assets/js/graph.js @@ -1,4 +1,4 @@ -async function drawGraph(baseUrl,isHome,pathColors,graphConfig) { +async function drawGraph(baseUrl, isHome, pathColors, graphConfig) { let { depth, diff --git a/layouts/partials/footerIndex.html b/layouts/partials/footerIndex.html index 36c8a8ac..5f190446 100644 --- a/layouts/partials/footerIndex.html +++ b/layouts/partials/footerIndex.html @@ -1,7 +1,3 @@ - - -
    - {{if $.Site.Data.config.enableFooter}} {{if $.Site.Data.graphConfig.enableGlobalGraph}}
    From 52a185f73b18d8e5a564c2144401de750b0e025a Mon Sep 17 00:00:00 2001 From: DhammaCharts <100090806+DhammaCharts@users.noreply.github.com> Date: Mon, 6 Jun 2022 16:49:01 +0100 Subject: [PATCH 203/695] change enableGlobalGraph to false --- data/graphConfig.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/graphConfig.yaml b/data/graphConfig.yaml index 06ce2b08..a6f916ac 100644 --- a/data/graphConfig.yaml +++ b/data/graphConfig.yaml @@ -1,7 +1,7 @@ # if true, a Global Graph will be shown on home page with full width, no backlink. # A different set of Local Graphs will be shown on sub pages. # if false, Local Graph will be default on every page as usual -enableGlobalGraph: true +enableGlobalGraph: false ### Local Graph ### From 473ea2c66f9122cec2647c281ca47cc073ca5fd0 Mon Sep 17 00:00:00 2001 From: Geoffrey Garrett Date: Mon, 27 Jun 2022 22:04:32 +0200 Subject: [PATCH 204/695] feat(layouts/partials/head.html): Adds general favicon support with dict and string input format --- layouts/partials/head.html | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/layouts/partials/head.html b/layouts/partials/head.html index b3ad28d8..7b8bb4eb 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -10,7 +10,17 @@ end }} - + + + {{ $favicon := $.Site.Data.config.favicon | default (slice (dict "rel" "shortcut icon" "type" "image/png" "href" "icon.png")) }} + {{ $type := (printf "%T" $favicon) }} + {{ if eq $type "string" }} + {{ $favicon | safeHTML }} + {{ else }} + {{ range $favicon }} + + {{- end }} + {{ end }} Date: Mon, 27 Jun 2022 22:05:35 +0200 Subject: [PATCH 205/695] docs(content/notes/config.md): Adds documentation for the new favicon support --- content/notes/config.md | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/content/notes/config.md b/content/notes/config.md index d04b1528..691e1874 100644 --- a/content/notes/config.md +++ b/content/notes/config.md @@ -23,6 +23,40 @@ links: # Links to show in footer link: https://github.com/jackyzha0 ``` +### HTML Favicons + +If you would like to customize the favicons of your website, you can add them to the `data/config.yaml` file. The default without any set `favicon` key is: + +```html + +``` + +The default can be overridden by defining a value to the `favicon` key in your `data/config.yaml` file. Here is a `List[Dictionary]` example format, which is equivalent to the default: + +```yaml +favicon: + - { rel: "shortcut icon", href: "icon.png", type: "image/png" } +``` + +In this format, the following keys are available: +- `rel`: The `rel` attribute of the `` tag. +- `type`: The `type` attribute of the `` tag. +- `href` (optional): The `href` attribute of the `` tag. +- `sizes` (optional): The `sizes` attribute of the `` tag. + +If you plan to add multiple favicons generated by a website, it may be easier to define it as HTML: + +```yaml +favicon: | + +``` + +Some websites that **generate favicons** for you (ordered alphabetically) include: +- [`favicon.io`](https://favicon.io/) +- [`realfavicongenerator.net`](https://realfavicongenerator.net/) +- [`www.favicon.cc`](https://www.favicon.cc/) + + ### Graph View To customize the Interactive Graph view, you can poke around `data/graphConfig.yaml`. From 997937af5a6dc317da56ae294dce927ec5930a4b Mon Sep 17 00:00:00 2001 From: Geoffrey Garrett Date: Tue, 28 Jun 2022 00:45:48 +0200 Subject: [PATCH 206/695] docs(config.md): Added short explainer on favicons --- content/notes/config.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/content/notes/config.md b/content/notes/config.md index 691e1874..8c758edd 100644 --- a/content/notes/config.md +++ b/content/notes/config.md @@ -25,7 +25,13 @@ links: # Links to show in footer ### HTML Favicons -If you would like to customize the favicons of your website, you can add them to the `data/config.yaml` file. The default without any set `favicon` key is: +A Favicon is most commonly seen preceding the URL in a browser. Some +other examples include (but are not limited to) bookmarks, search history, and +app icons (i.e. "save page to homescreen" on mobile devices). [File format support](https://en.wikipedia.org/wiki/Favicon#File_format_support) +and the [use of favicons](https://en.wikipedia.org/wiki/Favicon#Use_of_favicon) differ +across the combination of platforms and browsers. + +If you would like to customize the favicons of your website, you can add them to the `data/config.yaml` file. The **default** without any set `favicon` key is: ```html From 7070a1992a6c9462d50afcc7139f8f97e1dce2b8 Mon Sep 17 00:00:00 2001 From: Geoffrey Garrett Date: Tue, 28 Jun 2022 01:15:33 +0200 Subject: [PATCH 207/695] docs(config.md): Fixed multi-favicon examples and general favicon explanation throughout --- content/notes/config.md | 38 ++++++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/content/notes/config.md b/content/notes/config.md index 8c758edd..c9cbd0a4 100644 --- a/content/notes/config.md +++ b/content/notes/config.md @@ -25,23 +25,29 @@ links: # Links to show in footer ### HTML Favicons -A Favicon is most commonly seen preceding the URL in a browser. Some -other examples include (but are not limited to) bookmarks, search history, and -app icons (i.e. "save page to homescreen" on mobile devices). [File format support](https://en.wikipedia.org/wiki/Favicon#File_format_support) -and the [use of favicons](https://en.wikipedia.org/wiki/Favicon#Use_of_favicon) differ -across the combination of platforms and browsers. +A Favicon is most commonly seen as the **image preceding the URL in a browser**. +Some other examples include (but are not limited to) bookmarks, search history, +and app icons (i.e. "save page to home screen" on mobile devices). +[File format support](https://en.wikipedia.org/wiki/Favicon#File_format_support) +and the [use of favicons](https://en.wikipedia.org/wiki/Favicon#Use_of_favicon) +differ across the combination of platforms and browsers. -If you would like to customize the favicons of your website, you can add them to the `data/config.yaml` file. The **default** without any set `favicon` key is: +If you would like to customize the favicons of your quartz-based website, you +can add them to the `data/config.yaml` file. The **default** without any set +`favicon` key is: ```html ``` -The default can be overridden by defining a value to the `favicon` key in your `data/config.yaml` file. Here is a `List[Dictionary]` example format, which is equivalent to the default: +The default can be overridden by defining a value to the `favicon` key in your +`data/config.yaml` file. Here is a `List[Dictionary]` example format, which is +equivalent to the default: ```yaml favicon: - { rel: "shortcut icon", href: "icon.png", type: "image/png" } +# - { ... } # Repeat for each additional favicon you want to add ``` In this format, the following keys are available: @@ -50,18 +56,34 @@ In this format, the following keys are available: - `href` (optional): The `href` attribute of the `` tag. - `sizes` (optional): The `sizes` attribute of the `` tag. -If you plan to add multiple favicons generated by a website, it may be easier to define it as HTML: +If you plan to add multiple favicons generated by a website (see list below), it +may be easier to define it as HTML. Here is an example which appends the +**Apple touch icon** to quartz's default favicon: ```yaml favicon: | + ``` +This second favicon will now be used as a web page icon when someone adds your +webpage to the home screen of their Apple device. If you are interested in more +information about the current, and past, standards of favicons, you can read +[this article](https://www.emergeinteractive.com/insights/detail/the-essentials-of-favicons/). + Some websites that **generate favicons** for you (ordered alphabetically) include: - [`favicon.io`](https://favicon.io/) - [`realfavicongenerator.net`](https://realfavicongenerator.net/) - [`www.favicon.cc`](https://www.favicon.cc/) +These sites will take a base image and generate a set of favicons for you, +one of which will be, for example, the `apple-touch-icon` favicon. These sites +will often **also provide the HTML** for the favicon, which can be simply +added to the `data/config.yaml` using the HTML format of the `favicon` +argument. + +**Note** that all generated favicon paths, defined by the `href` +attribute, are relative to the `static/` directory. ### Graph View To customize the Interactive Graph view, you can poke around `data/graphConfig.yaml`. From b732293f65999e9a1d3a40a5ddeccf53a385b1f3 Mon Sep 17 00:00:00 2001 From: Geoffrey Garrett Date: Tue, 28 Jun 2022 01:21:22 +0200 Subject: [PATCH 208/695] fix(head.html): Adds robustness to `config.yaml` favicon definitions Initially assumed that `href` definitions should have `/...` as their pattern, and `baseURL` would always end with `/`, however the omission of `/` as the prefix of the former and suffix of the latter simultaneously, would result in broken favicon paths. Final comment: `..///...` is not breaking, which is worst case scenario with this fix. --- layouts/partials/head.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/layouts/partials/head.html b/layouts/partials/head.html index 7b8bb4eb..d33a0c7b 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -18,7 +18,7 @@ {{ $favicon | safeHTML }} {{ else }} {{ range $favicon }} - + {{- end }} {{ end }} From 67a7ba37e899ca0555fa37e159af6d599cf468ee Mon Sep 17 00:00:00 2001 From: Aiden Bai Date: Tue, 28 Jun 2022 21:43:28 -0700 Subject: [PATCH 209/695] Bump million to 1.11.3 --- assets/js/router.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/js/router.js b/assets/js/router.js index 3bdc8102..b2b6d211 100644 --- a/assets/js/router.js +++ b/assets/js/router.js @@ -3,7 +3,7 @@ import { navigate, prefetch, router, -} from "https://unpkg.com/million@1.9.8-0/dist/router.mjs" +} from "https://unpkg.com/million@1.11.3/dist/router.mjs" export const attachSPARouting = (init, rerender) => { // Attach SPA functions to the global Million namespace From f2078ee621b7137c49b176156ff70ddb5359d5a8 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Wed, 29 Jun 2022 16:12:33 -0700 Subject: [PATCH 210/695] fix: prefix images with base url for non-root quartz --- layouts/_default/_markup/render-image.html | 2 +- layouts/partials/head.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/layouts/_default/_markup/render-image.html b/layouts/_default/_markup/render-image.html index ff4e8b39..8dda6a8c 100644 --- a/layouts/_default/_markup/render-image.html +++ b/layouts/_default/_markup/render-image.html @@ -4,5 +4,5 @@ {{ .Text }} {{- else -}} {{$fixedUrl := (cond (hasPrefix $src "/") $src (print "/" $src)) | urlize}} -{{ .Text }} +{{ .Text }} {{- end -}} diff --git a/layouts/partials/head.html b/layouts/partials/head.html index d33a0c7b..a364cca2 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -70,7 +70,7 @@ const render = () => { // NOTE: everything within this callback will be executed for every page navigation. This is a good place to put JavaScript that loads or modifies data on the page, adds event listeners, etc. If you are only dealing with basic DOM replacement, use the init function - const siteBaseURL = new URL({{$.Site.BaseURL}}); + const siteBaseURL = new URL(BASE_URL); const pathBase = siteBaseURL.pathname; const pathWindow = window.location.pathname; const isHome = pathBase == pathWindow; From 200c60514207d7970968e31740797fad76f56ee7 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Wed, 29 Jun 2022 16:16:06 -0700 Subject: [PATCH 211/695] feat: enable raw html by default (fixes #143) --- config.toml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/config.toml b/config.toml index 803ef1ec..94c2f9b4 100644 --- a/config.toml +++ b/config.toml @@ -31,3 +31,5 @@ enableGitInfo = true [frontmatter] lastmod = ["lastmod", ":git", "date", "publishDate"] publishDate = ["publishDate", "date"] + [markup.goldmark.renderer] + unsafe = true From 8a100edeb81382dc838f600ee1b8dbd3e7560e37 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Wed, 29 Jun 2022 16:57:36 -0700 Subject: [PATCH 212/695] docs: polish and update --- content/_index.md | 11 ++- content/notes/config.md | 125 ++++++++++++++++++++++--------- content/notes/editing.md | 29 ++++--- content/notes/hosting.md | 12 ++- content/notes/obsidian.md | 3 + content/notes/preview changes.md | 11 +-- content/notes/setup.md | 30 +------- content/notes/updating.md | 34 +++++++++ 8 files changed, 159 insertions(+), 96 deletions(-) create mode 100644 content/notes/updating.md diff --git a/content/_index.md b/content/_index.md index bd742c4d..7d6d3f98 100644 --- a/content/_index.md +++ b/content/_index.md @@ -11,17 +11,16 @@ Host your second brain and [digital garden](https://jzhao.xyz/posts/networked-th 5. Support for both Markdown Links and Wikilinks ## Get Started -> 📚 [Setup your own digital garden using Quartz](notes/setup.md) +> 📚 Step 1: [Setup your own digital garden using Quartz](notes/setup.md) Not convinced yet? Look at some [community digital gardens](notes/showcase.md) built with Quartz, or read about [why I made Quartz](notes/philosophy.md) to begin with. -## Content Lists -If you prefer browsing the contents of this site through a list instead of a graph, you can find content lists here too: +Returning user? Figure out how to [[notes/updating|update]] your existing Quartz garden. -- [All Notes](/notes) -- [Setup-related Notes](/tags/setup) +### Content Lists +If you prefer browsing the contents of this site through a list instead of a graph, you see a list of all [setup-related notes](/tags/setup). -## Troubleshooting +### Troubleshooting - 🚧 [Troubleshooting and FAQ](notes/troubleshooting.md) - 🛠[Submit an Issue](https://github.com/jackyzha0/quartz/issues) - 👀 [Discord Community](https://discord.gg/cRFFHYye7t) diff --git a/content/notes/config.md b/content/notes/config.md index c9cbd0a4..6e18073c 100644 --- a/content/notes/config.md +++ b/content/notes/config.md @@ -2,6 +2,7 @@ title: "Configuration" tags: - setup +weight: 5 --- ## Configuration @@ -10,13 +11,49 @@ Quartz is designed to be extremely configurable. You can find the bulk of the co The majority of configuration can be be found under `data/config.yaml`. An annotated example configuration is shown below. ```yaml -name: Your name here! # Shows in the footer -enableToc: true # Whether to show a Table of Contents -enableLinkPreview: true # whether to render card previews for links -description: Page description to show to search engines -page_title: Quartz Example Page # Default Page Title +# The name to display in the footer +name: Jacky Zhao -links: # Links to show in footer +# whether to globally show the table of contents on each page +# this can be turned off on a per-page basis by adding this to the +# front-matter of that note +enableToc: true + +# whether to by-default open or close the table of contents on each page +openToc: false + +# whether to display on-hover link preview cards +enableLinkPreview: true + +# whether to try to process Latex +enableLatex: true + +# whether to enable single-page-app style rendering +# this prevents flahses of unstyled content and overall improves +# smoothness of quartz. More info in issue #109 on GitHub +enableSPA: true + +# whether to render a footer +enableFooter: true + +# whether backlinks of pages should show the context in which +# they were mentioned +enableContextualBacklinks: true + +# whether to show a section of recent notes on the home page +enableRecentNotes: false + +# page description used for SEO +description: + Host your second brain and digital garden for free. Quartz features extremely fast full-text search, + Wikilink support, backlinks, local graph, tags, and link previews. + +# title of the home page (also for SEO) +page_title: + "🪴 Quartz 3.2" + +# links to show in the footer +links: - link_name: Twitter link: https://twitter.com/_jzhao - link_name: Github @@ -24,14 +61,6 @@ links: # Links to show in footer ``` ### HTML Favicons - -A Favicon is most commonly seen as the **image preceding the URL in a browser**. -Some other examples include (but are not limited to) bookmarks, search history, -and app icons (i.e. "save page to home screen" on mobile devices). -[File format support](https://en.wikipedia.org/wiki/Favicon#File_format_support) -and the [use of favicons](https://en.wikipedia.org/wiki/Favicon#Use_of_favicon) -differ across the combination of platforms and browsers. - If you would like to customize the favicons of your quartz-based website, you can add them to the `data/config.yaml` file. The **default** without any set `favicon` key is: @@ -50,11 +79,7 @@ favicon: # - { ... } # Repeat for each additional favicon you want to add ``` -In this format, the following keys are available: -- `rel`: The `rel` attribute of the `` tag. -- `type`: The `type` attribute of the `` tag. -- `href` (optional): The `href` attribute of the `` tag. -- `sizes` (optional): The `sizes` attribute of the `` tag. +In this format, the keys are identical to their HTML representations. If you plan to add multiple favicons generated by a website (see list below), it may be easier to define it as HTML. Here is an example which appends the @@ -71,17 +96,6 @@ webpage to the home screen of their Apple device. If you are interested in more information about the current, and past, standards of favicons, you can read [this article](https://www.emergeinteractive.com/insights/detail/the-essentials-of-favicons/). -Some websites that **generate favicons** for you (ordered alphabetically) include: -- [`favicon.io`](https://favicon.io/) -- [`realfavicongenerator.net`](https://realfavicongenerator.net/) -- [`www.favicon.cc`](https://www.favicon.cc/) - -These sites will take a base image and generate a set of favicons for you, -one of which will be, for example, the `apple-touch-icon` favicon. These sites -will often **also provide the HTML** for the favicon, which can be simply -added to the `data/config.yaml` using the HTML format of the `favicon` -argument. - **Note** that all generated favicon paths, defined by the `href` attribute, are relative to the `static/` directory. @@ -89,11 +103,50 @@ attribute, are relative to the `static/` directory. To customize the Interactive Graph view, you can poke around `data/graphConfig.yaml`. ```yaml -enableLegend: false # automatically generate a legend -enableDrag: true # allow dragging nodes in the graph -enableZoom: true # allow zooming and panning the graph -depth: -1 # how many neighbours of the current node to show (-1 is all nodes) -paths: # colour specific nodes path off of their path +# if true, a Global Graph will be shown on home page with full width, no backlink. +# A different set of Local Graphs will be shown on sub pages. +# if false, Local Graph will be default on every page as usual +enableGlobalGraph: false + +### Local Graph ### +localGraph: + # whether automatically generate a legend + enableLegend: false + + # whether to allow dragging nodes in the graph + enableDrag: true + + # whether to allow zooming and panning the graph + enableZoom: true + + # how many neighbours of the current node to show (-1 is all nodes) + depth: 1 + + # initial zoom factor of the graph + scale: 1.2 + + # how strongly nodes should repel each other + repelForce: 2 + + # how strongly should nodes be attracted to the center of gravity + centerForce: 1 + + # what the default link length should be + linkDistance: 1 + + # how big the node labels should be + fontSize: 0.6 + + # scale at which to start fading the labes on nodes + opacityScale: 3 + +### Global Graph ### +globalGraph: + # same settings as above + +### For all graphs ### +# colour specific nodes path off of their path +paths: - /moc: "#4388cc" ``` @@ -110,7 +163,7 @@ More info about partials on [Hugo's website.](https://gohugo.io/templates/partia Still having problems? Checkout our [FAQ and Troubleshooting guide](notes/troubleshooting.md). -## Multilingual +## Language Support [CJK + Latex Support (测试)](notes/CJK%20+%20Latex%20Support%20(测试).md) comes out of the box with Quartz. Want to support languages that read from right-to-left (like Arabic)? Hugo (and by proxy, Quartz) supports this natively. diff --git a/content/notes/editing.md b/content/notes/editing.md index c8cefa0c..af7dd771 100644 --- a/content/notes/editing.md +++ b/content/notes/editing.md @@ -2,29 +2,18 @@ title: "Editing Content in Quartz" tags: - setup +weight: 1 --- ## Editing Quartz runs on top of [Hugo](https://gohugo.io/) so all notes are written in [Markdown](https://www.markdownguide.org/getting-started/). -### Obsidian -I recommend using [Obsidian](http://obsidian.md/) as a way to edit and grow your digital garden. It comes with a really nice editor and graphical interface to preview all of your local files. - -This step is **highly recommended**. - -🔗 [How to setup your Obsidian Vault to work with Quartz](notes/obsidian.md) - -### Ignoring Files -Only want to publish a subset of all of your notes? Don't worry, Quartz makes this a simple two-step process. - -⌠[Excluding pages from being published](notes/ignore%20notes.md) - ### Folder Structure Here's a rough overview of what's what. **All content in your garden can found in the `/content` folder.** To make edits, you can open any of the files and make changes directly and save it. You can organize content into any folder you'd like. -**To edit the main home page, open `/content/_index.md`.* +**To edit the main home page, open `/content/_index.md`.** To create a link between notes in your garden, just create a normal link using Markdown pointing to the document in question. Please note that **all links should be relative to the root `/content` path**. @@ -40,6 +29,8 @@ Example image (source is in content/notes/images/example.png) ![Example Image](/content/notes/images/example.png) ``` +You can also use wikilinks if that is what you are more comfortable with! + ### Front Matter Hugo is picky when it comes to metadata for files. Make sure that your title is double-quoted and that you have a title defined at the top of your file like so. You can also add tags here as well. @@ -48,22 +39,28 @@ Hugo is picky when it comes to metadata for files. Make sure that your title is title: "Example Title" tags: - example-tag -enableToc: false # do not show a table of contents on this page --- Rest of your content here... ``` +### Obsidian +I recommend using [Obsidian](http://obsidian.md/) as a way to edit and grow your digital garden. It comes with a really nice editor and graphical interface to preview all of your local files. + +This step is **highly recommended**. + +> 🔗 Step 3: [How to setup your Obsidian Vault to work with Quartz](notes/obsidian.md) + ## Previewing Changes This step is purely optional and mostly for those who want to see the published version of their digital garden locally before opening it up to the internet. This is *highly recommended* but not required. -👀 [Preview Quartz Changes](notes/preview%20changes.md) +> 👀 Step 4: [Preview Quartz Changes](notes/preview%20changes.md) For those who like to live life more on the edge, viewing the garden through Obsidian gets you pretty close to the real thing. ## Publishing Changes Now that you know the basics of managing your digital garden using Quartz, you can publish it to the internet! -🌠[Hosting Quartz online!](notes/hosting.md) +> 🌠Step 5: [Hosting Quartz online!](notes/hosting.md) Having problems? Checkout our [FAQ and Troubleshooting guide](notes/troubleshooting.md). diff --git a/content/notes/hosting.md b/content/notes/hosting.md index bb1d912e..adda82d4 100644 --- a/content/notes/hosting.md +++ b/content/notes/hosting.md @@ -2,6 +2,7 @@ title: "Deploying Quartz to the Web" tags: - setup +weight: 4 --- ## GitHub Pages @@ -41,7 +42,7 @@ Note: we specifically push to the `hugo` branch here. Our GitHub action automati ### Setting up the Site Now let's get this site up and running. Never hosted a site before? No problem. Have a fancy custom domain you already own or want to subdomain your Quartz? That's easy too. -Here, we take advantage of GitHub's free page hosting to deploy our site. Change `baseURL` in `/config.toml`. +Here, we take advantage of GitHub's free page hosting to deploy our site. Change `baseURL` in `/config.toml`. Make sure that your `baseURL` has a trailing `/`! @@ -51,7 +52,7 @@ Make sure that your `baseURL` has a trailing `/`! baseURL = "https:///" ``` -If you are using this under a subdomain (e.g. `.github.io/quartz`), include the trailing `/`. +If you are using this under a subdomain (e.g. `.github.io/quartz`), include the trailing `/`. **You need to do this especially if you are using GitHub!** ```toml baseURL = "https://.github.io/quartz/" @@ -75,10 +76,15 @@ Please note that the `cname` field should *not* have any path `e.g. end with /qu Have a custom domain? [Learn how to set it up with Quartz ](notes/custom%20Domain.md). +### Ignoring Files +Only want to publish a subset of all of your notes? Don't worry, Quartz makes this a simple two-step process. + +⌠[Excluding pages from being published](notes/ignore%20notes.md) + --- Now that your Quartz is live, let's figure out how to make Quartz really *yours*! -🎨 [Customizing Quartz](notes/config.md) +> Step 6: 🎨 [Customizing Quartz](notes/config.md) Having problems? Checkout our [FAQ and Troubleshooting guide](notes/troubleshooting.md). diff --git a/content/notes/obsidian.md b/content/notes/obsidian.md index 8e5fedd8..66cd78d9 100644 --- a/content/notes/obsidian.md +++ b/content/notes/obsidian.md @@ -2,6 +2,7 @@ title: "Obsidian Vault Integration" tags: - setup +weight: 2 --- ## Setup @@ -27,3 +28,5 @@ Inserting front matter everytime you want to create a new Note gets annoying rea **If you decide to overwrite the `/content` folder completely, don't remove the `/content/templates` folder!** Head over to Options > Core Plugins and enable the Templates plugin. Then go to Options > Hotkeys and set a hotkey for 'Insert Template' (I recommend `[cmd]+T`). That way, when you create a new note, you can just press the hotkey for a new template and be ready to go! + +> 👀 Step 4: [Preview Quartz Changes](notes/preview%20changes.md) \ No newline at end of file diff --git a/content/notes/preview changes.md b/content/notes/preview changes.md index 7f12f305..3130c58e 100644 --- a/content/notes/preview changes.md +++ b/content/notes/preview changes.md @@ -1,5 +1,6 @@ --- title: "Preview Changes" +weight: 3 --- If you'd like to preview what your Quartz site looks like before deploying it to the internet, here's exactly how to do that! @@ -12,12 +13,6 @@ This step will generate the list of backlinks for Hugo to parse. Ensure you have ```shell # Install and link `hugo-obsidian` locally $ go install github.com/jackyzha0/hugo-obsidian@latest - -# Navigate to your local Quartz folder -$ cd - -# Scrape all links in your Quartz folder and generate info for Quartz -$ hugo-obsidian -input=content -output=assets/indices -index -root=. ``` If you are running into an error saying that `command not found: hugo-obsidian`, make sure you set your `GOPATH` correctly! This will allow your terminal to correctly recognize hugo-obsidian as an executable. @@ -32,7 +27,9 @@ Hugo is the static site generator that powers Quartz. [Install Hugo with "extend $ cd # Start local server -$ hugo server +$ make serve # View your site in a browser at http://localhost:1313/ ``` + +> 🌠Step 5: [Hosting Quartz online!](notes/hosting.md) \ No newline at end of file diff --git a/content/notes/setup.md b/content/notes/setup.md index 495a43b6..fffb0fb2 100644 --- a/content/notes/setup.md +++ b/content/notes/setup.md @@ -2,6 +2,7 @@ title: "Setup" tags: - setup +weight: 0 --- ## Making your own Quartz @@ -26,33 +27,6 @@ $ git clone https://github.com/YOUR-USERNAME/quartz ## Editing Great! Now you have everything you need to start editing and growing your digital garden. If you're ready to start writing content already, check out the recommended flow for editing notes in Quartz. -âœï¸ [Editing Notes in Quartz](notes/editing.md) +> âœï¸ Step 2: [Editing Notes in Quartz](notes/editing.md) Having problems? Checkout our [FAQ and Troubleshooting guide](notes/troubleshooting.md). - -## Updating -Haven't updated Quartz in a while and want all the cool new optimizations? On Unix/Mac systems you can run the following command for a one-line update! This command will show you a log summary of all commits since you last updated, press `q` to acknowledge this. Then, it will show you each change in turn and press `y` to accept the patch or `n` to reject it. Usually you should press `y` for most of these unless it conflicts with existing changes you've made! - -```shell -make update - -# or, if you don't want the interactive parts and just want the update -make update-force -``` - -Or, manually checkout the changes yourself. - -> âš ï¸ **WARNING** âš ï¸ -> -> If you customized the files in `data/`, or anything inside `layouts/`, your customization may be overwritten! -> Make sure you have a copy of these changes if you don't want to lose them. - - -```shell -# add Quartz as a remote host -git remote add upstream git@github.com:jackyzha0/quartz.git - -# index and fetch changes -git fetch upstream -git checkout -p upstream/hugo -- layouts .github Makefile assets/js assets/styles/base.scss assets/styles/darkmode.scss config.toml data -``` diff --git a/content/notes/updating.md b/content/notes/updating.md new file mode 100644 index 00000000..290d6475 --- /dev/null +++ b/content/notes/updating.md @@ -0,0 +1,34 @@ +--- +title: "Updating" +aliases: +- update +--- + +Haven't updated Quartz in a while and want all the cool new optimizations? On Unix/Mac systems you can run the following command for a one-line update! This command will show you a log summary of all commits since you last updated, press `q` to acknowledge this. Then, it will show you each change in turn and press `y` to accept the patch or `n` to reject it. Usually you should press `y` for most of these unless it conflicts with existing changes you've made! + +```shell +make update +``` + +Or, if you don't want the interactive parts and just want to force update your local garden (this assumed that you are okay with some of your personalizations been overriden!) + +```shell +make update-force +``` + +Or, manually checkout the changes yourself. + +> âš ï¸ **WARNING** âš ï¸ +> +> If you customized the files in `data/`, or anything inside `layouts/`, your customization may be overwritten! +> Make sure you have a copy of these changes if you don't want to lose them. + + +```shell +# add Quartz as a remote host +git remote add upstream git@github.com:jackyzha0/quartz.git + +# index and fetch changes +git fetch upstream +git checkout -p upstream/hugo -- layouts .github Makefile assets/js assets/styles/base.scss assets/styles/darkmode.scss config.toml data +``` From 2b0482ae4c5ef7d5c7cc5d33419c1fb440c0238a Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Wed, 29 Jun 2022 17:03:41 -0700 Subject: [PATCH 213/695] docs: fix page weight --- content/notes/config.md | 4 +++- content/notes/editing.md | 2 +- content/notes/hosting.md | 2 +- content/notes/obsidian.md | 2 +- content/notes/preview changes.md | 4 +++- content/notes/setup.md | 2 +- 6 files changed, 10 insertions(+), 6 deletions(-) diff --git a/content/notes/config.md b/content/notes/config.md index 6e18073c..320a16d9 100644 --- a/content/notes/config.md +++ b/content/notes/config.md @@ -2,7 +2,7 @@ title: "Configuration" tags: - setup -weight: 5 +weight: 0 --- ## Configuration @@ -180,3 +180,5 @@ defaultContentLanguage = 'ar' title = 'مدونتي' weight = 1 ``` + +[[setup]] \ No newline at end of file diff --git a/content/notes/editing.md b/content/notes/editing.md index af7dd771..53f537c8 100644 --- a/content/notes/editing.md +++ b/content/notes/editing.md @@ -2,7 +2,7 @@ title: "Editing Content in Quartz" tags: - setup -weight: 1 +weight: -4 --- ## Editing diff --git a/content/notes/hosting.md b/content/notes/hosting.md index adda82d4..d46aff65 100644 --- a/content/notes/hosting.md +++ b/content/notes/hosting.md @@ -2,7 +2,7 @@ title: "Deploying Quartz to the Web" tags: - setup -weight: 4 +weight: -1 --- ## GitHub Pages diff --git a/content/notes/obsidian.md b/content/notes/obsidian.md index 66cd78d9..c709a70d 100644 --- a/content/notes/obsidian.md +++ b/content/notes/obsidian.md @@ -2,7 +2,7 @@ title: "Obsidian Vault Integration" tags: - setup -weight: 2 +weight: -3 --- ## Setup diff --git a/content/notes/preview changes.md b/content/notes/preview changes.md index 3130c58e..d7e2770e 100644 --- a/content/notes/preview changes.md +++ b/content/notes/preview changes.md @@ -1,6 +1,8 @@ --- title: "Preview Changes" -weight: 3 +tags: +- setup +weight: -2 --- If you'd like to preview what your Quartz site looks like before deploying it to the internet, here's exactly how to do that! diff --git a/content/notes/setup.md b/content/notes/setup.md index fffb0fb2..12df750e 100644 --- a/content/notes/setup.md +++ b/content/notes/setup.md @@ -2,7 +2,7 @@ title: "Setup" tags: - setup -weight: 0 +weight: -5 --- ## Making your own Quartz From e884f4927f3e48285ca6689507f5e0f61072de04 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Wed, 29 Jun 2022 17:17:53 -0700 Subject: [PATCH 214/695] fix: anchor formatting (closes #141) --- content/notes/config.md | 4 +--- content/notes/editing.md | 2 +- layouts/partials/textprocessing.html | 4 ++-- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/content/notes/config.md b/content/notes/config.md index 320a16d9..2c1e352f 100644 --- a/content/notes/config.md +++ b/content/notes/config.md @@ -179,6 +179,4 @@ defaultContentLanguage = 'ar' languagedirection = 'rtl' title = 'مدونتي' weight = 1 -``` - -[[setup]] \ No newline at end of file +``` \ No newline at end of file diff --git a/content/notes/editing.md b/content/notes/editing.md index 53f537c8..4aaf5856 100644 --- a/content/notes/editing.md +++ b/content/notes/editing.md @@ -34,7 +34,7 @@ You can also use wikilinks if that is what you are more comfortable with! ### Front Matter Hugo is picky when it comes to metadata for files. Make sure that your title is double-quoted and that you have a title defined at the top of your file like so. You can also add tags here as well. -```markdown +```yaml --- title: "Example Title" tags: diff --git a/layouts/partials/textprocessing.html b/layouts/partials/textprocessing.html index 8e8c9991..56e2e8ba 100644 --- a/layouts/partials/textprocessing.html +++ b/layouts/partials/textprocessing.html @@ -39,7 +39,7 @@ {{$reference := split $path "#"}} {{$title := index $reference 0}} {{$block := default "" (index $reference 1)}} - {{$block = strings.TrimRight "/" (cond (eq $block "") $block (printf "#%s" $block))}} + {{$block = strings.TrimRight "/" (cond (eq $block "") $block (printf "#%s" $block)) | urlize | lower}} {{$href := strings.TrimRight "/" ($page.GetPage $title).RelPermalink}} {{$display := default $title (index $split 1)}} {{if not $href}} @@ -54,7 +54,7 @@ {{end}} {{end}} -{{/* Add copyable anchors */}} +{{/* Add jumpable anchors */}} {{ $content = $content | replaceRE "()(.+)()" `${1}# ${3}${4}` }} {{ $content | safeHTML }} From 8b2fba895aa804e895eaa02a622f318113a35663 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Wed, 29 Jun 2022 17:34:05 -0700 Subject: [PATCH 215/695] feat: image scaling (closes #131) --- assets/styles/base.scss | 2 +- content/notes/hosting.md | 6 +++++- layouts/partials/textprocessing.html | 6 ++---- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/assets/styles/base.scss b/assets/styles/base.scss index 1c353f33..776f32d7 100644 --- a/assets/styles/base.scss +++ b/assets/styles/base.scss @@ -85,7 +85,7 @@ table { } img { - width: 100%; + max-width: 100%; border-radius: 3px; margin: 1em 0; } diff --git a/content/notes/hosting.md b/content/notes/hosting.md index d46aff65..8db27466 100644 --- a/content/notes/hosting.md +++ b/content/notes/hosting.md @@ -3,9 +3,11 @@ title: "Deploying Quartz to the Web" tags: - setup weight: -1 +aliases: +- hosting --- -## GitHub Pages +## Hosting on GitHub Pages Quartz is designed to be effortless to deploy. If you forked and cloned Quartz directly from the repository, everything should already be good to go! Follow the steps below. ### Enable GitHub Actions @@ -13,6 +15,8 @@ By default, GitHub disables workflows from running automatically on Forked Repos ![Enable GitHub Actions](notes/images/github-actions.png)*Enable GitHub Actions* +![[notes/images/github-actions.png|200]] + ### Enable GitHub Pages Head to the 'Settings' tab of your forked repository and go to the 'Pages' tab. diff --git a/layouts/partials/textprocessing.html b/layouts/partials/textprocessing.html index 56e2e8ba..dfb0ff2e 100644 --- a/layouts/partials/textprocessing.html +++ b/layouts/partials/textprocessing.html @@ -27,10 +27,8 @@ {{$inner := . | strings.TrimPrefix "![[" | strings.TrimSuffix "]]" }} {{$split := split $inner "|"}} {{$path := index $split 0 | relURL}} - {{$reference := split $path "#"}} - {{$title := index $reference 0}} - {{$display := default $title (index $split 1)}} - {{$img := printf "" $path $display}} + {{$width := index $split 1}} + {{$img := printf "" $path (default "auto" $width)}} {{$content = replace $content . $img}} {{else}} {{$inner := . | strings.TrimPrefix "[[" | strings.TrimSuffix "]]" }} From 0896814959e912cabaf9ec83bc0a3eb77d152842 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Wed, 29 Jun 2022 17:35:29 -0700 Subject: [PATCH 216/695] docs: remove test image from hosting --- content/notes/hosting.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/content/notes/hosting.md b/content/notes/hosting.md index 8db27466..70f9d04c 100644 --- a/content/notes/hosting.md +++ b/content/notes/hosting.md @@ -15,8 +15,6 @@ By default, GitHub disables workflows from running automatically on Forked Repos ![Enable GitHub Actions](notes/images/github-actions.png)*Enable GitHub Actions* -![[notes/images/github-actions.png|200]] - ### Enable GitHub Pages Head to the 'Settings' tab of your forked repository and go to the 'Pages' tab. From 8d7a7b712f5a4ee49e3687de8fb00f76d7571368 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Fri, 1 Jul 2022 11:02:42 -0700 Subject: [PATCH 217/695] fix: non-SPA fn defs (closes #154) --- layouts/partials/head.html | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/layouts/partials/head.html b/layouts/partials/head.html index a364cca2..d0630a20 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -127,8 +127,11 @@ navigate: (url) => (window.location.href = url), prefetch: () => {}, } - init() - render() + + window.addEventListener("DOMContentLoaded", () => { + init() + render() + }) {{end}} From d3e20b8b94c9229e94fccbe54c867efde6847c6e Mon Sep 17 00:00:00 2001 From: Geoffrey Garrett Date: Fri, 1 Jul 2022 20:03:52 +0200 Subject: [PATCH 218/695] Added optional rendering of code block titles (#148) --- assets/js/code-title.js | 13 +++ assets/js/darkmode.js | 12 ++- assets/styles/_dark_syntax.scss | 85 +++++++++++++++++++ assets/styles/_light_syntax.scss | 85 +++++++++++++++++++ assets/styles/code-title.scss | 20 +++++ assets/styles/syntax.scss | 139 +++++++++++-------------------- content/notes/config.md | 44 ++++++++-- data/config.yaml | 1 + layouts/partials/head.html | 24 +++++- 9 files changed, 321 insertions(+), 102 deletions(-) create mode 100644 assets/js/code-title.js create mode 100644 assets/styles/_dark_syntax.scss create mode 100644 assets/styles/_light_syntax.scss create mode 100644 assets/styles/code-title.scss diff --git a/assets/js/code-title.js b/assets/js/code-title.js new file mode 100644 index 00000000..698edc9b --- /dev/null +++ b/assets/js/code-title.js @@ -0,0 +1,13 @@ + +function addTitleToCodeBlocks() { + var els = document.getElementsByClassName("highlight"); + for (var i = 0; i < els.length; i++) { + if (els[i].title.length) { + let div = document.createElement("div"); + if (els[i].getElementsByClassName("code-title").length) continue; + div.textContent=els[i].title; + div.classList.add("code-title") + els[i].insertBefore(div, els[i].firstChild); + } + } +}; diff --git a/assets/js/darkmode.js b/assets/js/darkmode.js index d95a281a..11ce15f7 100644 --- a/assets/js/darkmode.js +++ b/assets/js/darkmode.js @@ -1,18 +1,26 @@ const userPref = window.matchMedia('(prefers-color-scheme: light)').matches ? 'light' : 'dark' const currentTheme = localStorage.getItem('theme') ?? userPref +const syntaxTheme = document.querySelector("#theme-link"); + + +{{ $darkSyntax := resources.Get "styles/_dark_syntax.scss" | resources.ToCSS (dict "outputStyle" "compressed") | resources.Fingerprint "md5" | resources.Minify }} +{{ $lightSyntax := resources.Get "styles/_light_syntax.scss" | resources.ToCSS (dict "outputStyle" "compressed") | resources.Fingerprint "md5" | resources.Minify }} if (currentTheme) { document.documentElement.setAttribute('saved-theme', currentTheme); + (currentTheme === 'dark') ? syntaxTheme.href = '{{ $darkSyntax.Permalink }}' : syntaxTheme.href = '{{ $lightSyntax.Permalink }}'; } const switchTheme = (e) => { if (e.target.checked) { - document.documentElement.setAttribute('saved-theme', 'dark') - localStorage.setItem('theme', 'dark') + document.documentElement.setAttribute('saved-theme', 'dark'); + localStorage.setItem('theme', 'dark'); + syntaxTheme.href = '{{ $darkSyntax.Permalink }}'; } else { document.documentElement.setAttribute('saved-theme', 'light') localStorage.setItem('theme', 'light') + syntaxTheme.href = '{{ $lightSyntax.Permalink }}'; } } diff --git a/assets/styles/_dark_syntax.scss b/assets/styles/_dark_syntax.scss new file mode 100644 index 00000000..9d2019a8 --- /dev/null +++ b/assets/styles/_dark_syntax.scss @@ -0,0 +1,85 @@ +/* Background */ .bg { color: #f8f8f2; background-color: #282a36; } +/* PreWrapper */ .chroma { color: #f8f8f2; background-color: #282a36; } +/* Other */ .chroma .x { } +/* Error */ .chroma .err { } +/* 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: #ff79c6 } +/* KeywordConstant */ .chroma .kc { color: #ff79c6 } +/* KeywordDeclaration */ .chroma .kd { color: #8be9fd; font-style: italic } +/* KeywordNamespace */ .chroma .kn { color: #ff79c6 } +/* KeywordPseudo */ .chroma .kp { color: #ff79c6 } +/* KeywordReserved */ .chroma .kr { color: #ff79c6 } +/* KeywordType */ .chroma .kt { color: #8be9fd } +/* Name */ .chroma .n { } +/* NameAttribute */ .chroma .na { color: #50fa7b } +/* NameBuiltin */ .chroma .nb { color: #8be9fd; font-style: italic } +/* NameBuiltinPseudo */ .chroma .bp { } +/* NameClass */ .chroma .nc { color: #50fa7b } +/* NameConstant */ .chroma .no { } +/* NameDecorator */ .chroma .nd { } +/* NameEntity */ .chroma .ni { } +/* NameException */ .chroma .ne { } +/* NameFunction */ .chroma .nf { color: #50fa7b } +/* NameFunctionMagic */ .chroma .fm { } +/* NameLabel */ .chroma .nl { color: #8be9fd; font-style: italic } +/* NameNamespace */ .chroma .nn { } +/* NameOther */ .chroma .nx { } +/* NameProperty */ .chroma .py { } +/* NameTag */ .chroma .nt { color: #ff79c6 } +/* NameVariable */ .chroma .nv { color: #8be9fd; font-style: italic } +/* NameVariableClass */ .chroma .vc { color: #8be9fd; font-style: italic } +/* NameVariableGlobal */ .chroma .vg { color: #8be9fd; font-style: italic } +/* NameVariableInstance */ .chroma .vi { color: #8be9fd; font-style: italic } +/* NameVariableMagic */ .chroma .vm { } +/* Literal */ .chroma .l { } +/* LiteralDate */ .chroma .ld { } +/* LiteralString */ .chroma .s { color: #f1fa8c } +/* LiteralStringAffix */ .chroma .sa { color: #f1fa8c } +/* LiteralStringBacktick */ .chroma .sb { color: #f1fa8c } +/* LiteralStringChar */ .chroma .sc { color: #f1fa8c } +/* LiteralStringDelimiter */ .chroma .dl { color: #f1fa8c } +/* LiteralStringDoc */ .chroma .sd { color: #f1fa8c } +/* LiteralStringDouble */ .chroma .s2 { color: #f1fa8c } +/* LiteralStringEscape */ .chroma .se { color: #f1fa8c } +/* LiteralStringHeredoc */ .chroma .sh { color: #f1fa8c } +/* LiteralStringInterpol */ .chroma .si { color: #f1fa8c } +/* LiteralStringOther */ .chroma .sx { color: #f1fa8c } +/* LiteralStringRegex */ .chroma .sr { color: #f1fa8c } +/* LiteralStringSingle */ .chroma .s1 { color: #f1fa8c } +/* LiteralStringSymbol */ .chroma .ss { color: #f1fa8c } +/* LiteralNumber */ .chroma .m { color: #bd93f9 } +/* LiteralNumberBin */ .chroma .mb { color: #bd93f9 } +/* LiteralNumberFloat */ .chroma .mf { color: #bd93f9 } +/* LiteralNumberHex */ .chroma .mh { color: #bd93f9 } +/* LiteralNumberInteger */ .chroma .mi { color: #bd93f9 } +/* LiteralNumberIntegerLong */ .chroma .il { color: #bd93f9 } +/* LiteralNumberOct */ .chroma .mo { color: #bd93f9 } +/* Operator */ .chroma .o { color: #ff79c6 } +/* OperatorWord */ .chroma .ow { color: #ff79c6 } +/* Punctuation */ .chroma .p { } +/* Comment */ .chroma .c { color: #6272a4 } +/* CommentHashbang */ .chroma .ch { color: #6272a4 } +/* CommentMultiline */ .chroma .cm { color: #6272a4 } +/* CommentSingle */ .chroma .c1 { color: #6272a4 } +/* CommentSpecial */ .chroma .cs { color: #6272a4 } +/* CommentPreproc */ .chroma .cp { color: #ff79c6 } +/* CommentPreprocFile */ .chroma .cpf { color: #ff79c6 } +/* Generic */ .chroma .g { } +/* GenericDeleted */ .chroma .gd { color: #ff5555 } +/* GenericEmph */ .chroma .ge { text-decoration: underline } +/* GenericError */ .chroma .gr { } +/* GenericHeading */ .chroma .gh { font-weight: bold } +/* GenericInserted */ .chroma .gi { color: #50fa7b; font-weight: bold } +/* GenericOutput */ .chroma .go { color: #44475a } +/* GenericPrompt */ .chroma .gp { } +/* GenericStrong */ .chroma .gs { } +/* GenericSubheading */ .chroma .gu { font-weight: bold } +/* GenericTraceback */ .chroma .gt { } +/* GenericUnderline */ .chroma .gl { text-decoration: underline } +/* TextWhitespace */ .chroma .w { } diff --git a/assets/styles/_light_syntax.scss b/assets/styles/_light_syntax.scss new file mode 100644 index 00000000..1927b575 --- /dev/null +++ b/assets/styles/_light_syntax.scss @@ -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 { } diff --git a/assets/styles/code-title.scss b/assets/styles/code-title.scss new file mode 100644 index 00000000..11b088a7 --- /dev/null +++ b/assets/styles/code-title.scss @@ -0,0 +1,20 @@ +.code-title { + color: var(--primary) ; + font-family: monospace; + width: max-content; + overflow-x: auto; + display: inline-block; + vertical-align: middle; + font-weight: normal; + line-height: 1em; + position: relative; + padding: 0.5em 0.6em 0.6em; // + 1.2 em + max-width: calc(100% - 1.2em); // (-1.2 em) fits article width exactly + margin-bottom: -0.2em; + z-index: -1; + border-top-left-radius: 0.3em; + border-top-right-radius: 0.3em; + font-size: 0.9em; + background-color: var(--lightgray); + filter: hue-rotate(-30deg) contrast(1.0) opacity(0.8); +} \ No newline at end of file diff --git a/assets/styles/syntax.scss b/assets/styles/syntax.scss index bada47ab..fbea72a4 100644 --- a/assets/styles/syntax.scss +++ b/assets/styles/syntax.scss @@ -1,99 +1,58 @@ -/* Background */ .chroma { color: #f8f8f2; background-color: #282a36; overflow: hidden } -/* Other */ .chroma .x { } -/* Error */ .chroma .err { } -/* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; } -/* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; width: auto; overflow: auto; display: block; } -/* LineHighlight */ .chroma .hl { display: block; width: 100%;background-color: #ffffcc } -/* LineNumbersTable */ .chroma .lnt { margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f } -/* LineNumbers */ .chroma .ln { margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f } -/* Keyword */ .chroma .k { color: #ff79c6 } -/* KeywordConstant */ .chroma .kc { color: #ff79c6 } -/* KeywordDeclaration */ .chroma .kd { color: #8be9fd; font-style: italic } -/* KeywordNamespace */ .chroma .kn { color: #ff79c6 } -/* KeywordPseudo */ .chroma .kp { color: #ff79c6 } -/* KeywordReserved */ .chroma .kr { color: #ff79c6 } -/* KeywordType */ .chroma .kt { color: #8be9fd } -/* Name */ .chroma .n { } -/* NameAttribute */ .chroma .na { color: #50fa7b } -/* NameBuiltin */ .chroma .nb { color: #8be9fd; font-style: italic } -/* NameBuiltinPseudo */ .chroma .bp { } -/* NameClass */ .chroma .nc { color: #50fa7b } -/* NameConstant */ .chroma .no { } -/* NameDecorator */ .chroma .nd { } -/* NameEntity */ .chroma .ni { } -/* NameException */ .chroma .ne { } -/* NameFunction */ .chroma .nf { color: #50fa7b } -/* NameFunctionMagic */ .chroma .fm { } -/* NameLabel */ .chroma .nl { color: #8be9fd; font-style: italic } -/* NameNamespace */ .chroma .nn { } -/* NameOther */ .chroma .nx { } -/* NameProperty */ .chroma .py { } -/* NameTag */ .chroma .nt { color: #ff79c6 } -/* NameVariable */ .chroma .nv { color: #8be9fd; font-style: italic } -/* NameVariableClass */ .chroma .vc { color: #8be9fd; font-style: italic } -/* NameVariableGlobal */ .chroma .vg { color: #8be9fd; font-style: italic } -/* NameVariableInstance */ .chroma .vi { color: #8be9fd; font-style: italic } -/* NameVariableMagic */ .chroma .vm { } -/* Literal */ .chroma .l { } -/* LiteralDate */ .chroma .ld { } -/* LiteralString */ .chroma .s { color: #f1fa8c } -/* LiteralStringAffix */ .chroma .sa { color: #f1fa8c } -/* LiteralStringBacktick */ .chroma .sb { color: #f1fa8c } -/* LiteralStringChar */ .chroma .sc { color: #f1fa8c } -/* LiteralStringDelimiter */ .chroma .dl { color: #f1fa8c } -/* LiteralStringDoc */ .chroma .sd { color: #f1fa8c } -/* LiteralStringDouble */ .chroma .s2 { color: #f1fa8c } -/* LiteralStringEscape */ .chroma .se { color: #f1fa8c } -/* LiteralStringHeredoc */ .chroma .sh { color: #f1fa8c } -/* LiteralStringInterpol */ .chroma .si { color: #f1fa8c } -/* LiteralStringOther */ .chroma .sx { color: #f1fa8c } -/* LiteralStringRegex */ .chroma .sr { color: #f1fa8c } -/* LiteralStringSingle */ .chroma .s1 { color: #f1fa8c } -/* LiteralStringSymbol */ .chroma .ss { color: #f1fa8c } -/* LiteralNumber */ .chroma .m { color: #bd93f9 } -/* LiteralNumberBin */ .chroma .mb { color: #bd93f9 } -/* LiteralNumberFloat */ .chroma .mf { color: #bd93f9 } -/* LiteralNumberHex */ .chroma .mh { color: #bd93f9 } -/* LiteralNumberInteger */ .chroma .mi { color: #bd93f9 } -/* LiteralNumberIntegerLong */ .chroma .il { color: #bd93f9 } -/* LiteralNumberOct */ .chroma .mo { color: #bd93f9 } -/* Operator */ .chroma .o { color: #ff79c6 } -/* OperatorWord */ .chroma .ow { color: #ff79c6 } -/* Punctuation */ .chroma .p { } -/* Comment */ .chroma .c { color: #6272a4 } -/* CommentHashbang */ .chroma .ch { color: #6272a4 } -/* CommentMultiline */ .chroma .cm { color: #6272a4 } -/* CommentSingle */ .chroma .c1 { color: #6272a4 } -/* CommentSpecial */ .chroma .cs { color: #6272a4 } -/* CommentPreproc */ .chroma .cp { color: #ff79c6 } -/* CommentPreprocFile */ .chroma .cpf { color: #ff79c6 } -/* Generic */ .chroma .g { } -/* GenericDeleted */ .chroma .gd { color: #8b080b } -/* GenericEmph */ .chroma .ge { text-decoration: underline } -/* GenericError */ .chroma .gr { } -/* GenericHeading */ .chroma .gh { font-weight: bold } -/* GenericInserted */ .chroma .gi { font-weight: bold } -/* GenericOutput */ .chroma .go { color: #44475a } -/* GenericPrompt */ .chroma .gp { } -/* GenericStrong */ .chroma .gs { } -/* GenericSubheading */ .chroma .gu { font-weight: bold } -/* GenericTraceback */ .chroma .gt { } -/* GenericUnderline */ .chroma .gl { text-decoration: underline } -/* TextWhitespace */ .chroma .w { } +// Overrides +/* Background */ +.chroma { + overflow: hidden !important; + background-color: var(--lightgray) !important; +} + +/* LineTable */ +.chroma .lntable { + width: auto !important; + overflow: auto !important; + display: block !important; +} + +/* LineHighlight */ +.chroma .hl { + display: block !important; + width: 100% !important; +} + +/* LineNumbersTable */ +.chroma .lnt { + margin-right: 0.0em !important; + padding: 0 0.0em 0 0.0em !important; +} + +/* LineNumbers */ +.chroma .ln { + margin-right: 0.0em !important; + padding: 0 0.0em 0 0.0em !important; +} + +/* GenericDeleted */ +.chroma .gd { + color: #8b080b !important; +} + +/* GenericInserted */ +.chroma .gi { + font-weight: bold !important; +} .lntd:first-of-type > .chroma { - padding-right: 0; + padding-right: 0 !important; } .chroma code { font-family: 'Fira Code' !important; - font-size: 0.85em; - line-height: 1em; - background: none; - padding: 0; + font-size: 0.85em !important; + line-height: 2em !important; + background: none !important; + padding: 0 !important; } .chroma { - border-radius: 3px; - margin: 0; -} \ No newline at end of file + border-radius: 3px !important; + margin: 0 !important; +} diff --git a/content/notes/config.md b/content/notes/config.md index 2c1e352f..076857ed 100644 --- a/content/notes/config.md +++ b/content/notes/config.md @@ -8,9 +8,9 @@ weight: 0 ## Configuration Quartz is designed to be extremely configurable. You can find the bulk of the configuration scattered throughout the repository depending on how in-depth you'd like to get. -The majority of configuration can be be found under `data/config.yaml`. An annotated example configuration is shown below. +The majority of configuration can be found under `data/config.yaml`. An annotated example configuration is shown below. -```yaml +```yaml {title="data/config.yaml"} # The name to display in the footer name: Jacky Zhao @@ -25,6 +25,9 @@ openToc: false # whether to display on-hover link preview cards enableLinkPreview: true +# whether to render titles for code blocks +enableCodeBlockTitle: true + # whether to try to process Latex enableLatex: true @@ -60,12 +63,34 @@ links: link: https://github.com/jackyzha0 ``` +### Code Block Titles + +To add code block titles with Quartz: + +1. Ensure that code block titles are enabled in Quartz's configuration: + + ```yaml {title="data/config.yaml", linenos=false} + enableCodeBlockTitle: true + ``` + +2. Add the `title` attribute to the desired [code block + fence](https://gohugo.io/content-management/syntax-highlighting/#highlighting-in-code-fences): + + ```markdown {linenos=false} + ```yaml {title="data/config.yaml"} + enableCodeBlockTitle: true # example from step 1 + ``` + ``` + +**Note** that if `{title=}` is included, and code block titles are not +enabled, no errors will occur and the title attribute will be ignored. + ### HTML Favicons If you would like to customize the favicons of your quartz-based website, you can add them to the `data/config.yaml` file. The **default** without any set `favicon` key is: -```html +```html {title="layouts/partials/head.html", linenostart=15} ``` @@ -73,7 +98,7 @@ The default can be overridden by defining a value to the `favicon` key in your `data/config.yaml` file. Here is a `List[Dictionary]` example format, which is equivalent to the default: -```yaml +```yaml {title="data/config.yaml", linenos=false} favicon: - { rel: "shortcut icon", href: "icon.png", type: "image/png" } # - { ... } # Repeat for each additional favicon you want to add @@ -85,7 +110,7 @@ If you plan to add multiple favicons generated by a website (see list below), it may be easier to define it as HTML. Here is an example which appends the **Apple touch icon** to quartz's default favicon: -```yaml +```yaml {title="data/config.yaml", linenos=false} favicon: | @@ -102,7 +127,8 @@ attribute, are relative to the `static/` directory. ### Graph View To customize the Interactive Graph view, you can poke around `data/graphConfig.yaml`. -```yaml + +```yaml {title="data/graphConfig.yaml"} # if true, a Global Graph will be shown on home page with full width, no backlink. # A different set of Local Graphs will be shown on sub pages. # if false, Local Graph will be default on every page as usual @@ -128,10 +154,10 @@ localGraph: # how strongly nodes should repel each other repelForce: 2 - # how strongly should nodes be attracted to the center of gravity + # how strongly should nodes be attracted to the center of gravity centerForce: 1 - # what the default link length should be + # what the default link length should be linkDistance: 1 # how big the node labels should be @@ -179,4 +205,4 @@ defaultContentLanguage = 'ar' languagedirection = 'rtl' title = 'مدونتي' weight = 1 -``` \ No newline at end of file +``` diff --git a/data/config.yaml b/data/config.yaml index cae94ef4..e55035a0 100644 --- a/data/config.yaml +++ b/data/config.yaml @@ -3,6 +3,7 @@ enableToc: true openToc: false enableLinkPreview: true enableLatex: true +enableCodeBlockTitle: true enableSPA: true enableFooter: true enableContextualBacklinks: true diff --git a/layouts/partials/head.html b/layouts/partials/head.html index d0630a20..e3eebbfe 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -36,7 +36,11 @@ {{$finalCss := $css | resources.Concat "styles.css" | resources.Fingerprint "md5" | resources.Minify }} - {{ $darkMode := resources.Get "js/darkmode.js" | resources.Fingerprint "md5" | resources.Minify }} + {{$lightSyntax := resources.Get "styles/_light_syntax.scss" | resources.ToCSS (dict "outputStyle" "compressed") | resources.Fingerprint "md5" | resources.Minify }} + + + + {{ $darkMode := resources.Get "js/darkmode.js" | resources.ExecuteAsTemplate "js/darkmode.js" . | resources.Fingerprint "md5" | resources.Minify }} {{partial "katex.html" .}} @@ -44,6 +48,12 @@ resources.Minify }} + + {{ if $.Site.Data.config.enableCodeBlockTitle }} + {{ $codeTitle := resources.Get "js/code-title.js" | resources.Fingerprint "md5" | resources.Minify }} + + {{end}} + {{$linkIndex := resources.Get "indices/linkIndex.json" | resources.Fingerprint "md5" | resources.Minify | }} {{$contentIndex := resources.Get @@ -75,6 +85,10 @@ const pathWindow = window.location.pathname; const isHome = pathBase == pathWindow; + {{if $.Site.Data.config.enableSPA -}} + addTitleToCodeBlocks(); + {{ end }} + {{if $.Site.Data.config.enableFooter}} const container = document.getElementById("graph-container") // retry if the graph is not ready @@ -92,6 +106,7 @@ {{end}} + {{if $.Site.Data.config.enableLinkPreview}} initPopover( {{strings.TrimRight "/" .Site.BaseURL }}, @@ -103,6 +118,13 @@ const init = (doc = document) => { // NOTE: everything within this callback will be executed for initial page navigation. This is a good place to put JavaScript that only replaces DOM nodes. + {{if $.Site.Data.config.enableCodeBlockTitle -}} + {{if $.Site.Data.config.enableSPA -}} + addTitleToCodeBlocks(); + {{ else }} + window.addEventListener("DOMContentLoaded", addTitleToCodeBlocks); + {{- end -}} + {{- end -}} {{if $.Site.Data.config.enableLatex}} renderMathInElement(doc.body, { delimiters: [ From eda370334a3798070c2f79ec38021edb3b33a84f Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Fri, 1 Jul 2022 11:27:50 -0700 Subject: [PATCH 219/695] fix: image scaling for md-style links (closes #155) --- content/notes/hosting.md | 2 +- layouts/_default/_markup/render-image.html | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/content/notes/hosting.md b/content/notes/hosting.md index 70f9d04c..fffcd653 100644 --- a/content/notes/hosting.md +++ b/content/notes/hosting.md @@ -66,7 +66,7 @@ Please note that the `cname` field should *not* have any path `e.g. end with /qu [Reference `deploy.yaml` here](https://github.com/jackyzha0/quartz/blob/hugo/.github/workflows/deploy.yaml) -```yaml +```yaml {title=".github/workflows/deploy.yaml"} - name: Deploy uses: peaceiris/actions-gh-pages@v3 with: diff --git a/layouts/_default/_markup/render-image.html b/layouts/_default/_markup/render-image.html index 8dda6a8c..dbcf732f 100644 --- a/layouts/_default/_markup/render-image.html +++ b/layouts/_default/_markup/render-image.html @@ -1,8 +1,9 @@ {{$src := .Destination | safeURL }} +{{$width := index (split .Text "|") 1 | default "auto" }} {{$external := strings.HasPrefix $src "http" }} {{- if $external -}} -{{ .Text }} +{{ .Text }} {{- else -}} {{$fixedUrl := (cond (hasPrefix $src "/") $src (print "/" $src)) | urlize}} -{{ .Text }} +{{ .Text }} {{- end -}} From a8137edf247c46ef3a5af78c48bcd299a13c1a7d Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Sat, 2 Jul 2022 17:14:17 -0700 Subject: [PATCH 220/695] fix: adjust weird colours for err highlighting --- assets/styles/_light_syntax.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/styles/_light_syntax.scss b/assets/styles/_light_syntax.scss index 1927b575..d0f452e0 100644 --- a/assets/styles/_light_syntax.scss +++ b/assets/styles/_light_syntax.scss @@ -1,7 +1,7 @@ /* 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 } +/* Error */ .chroma .err { } /* 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; } From 015ed4cfa2db4636e03debcda0d4201f24346098 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aiden=20Bai=20=E7=99=BD=E5=AE=87=E5=BD=A4?= Date: Sat, 2 Jul 2022 19:40:18 -0700 Subject: [PATCH 221/695] Fix `width: auto` for SPA routing (#156) --- assets/js/router.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/js/router.js b/assets/js/router.js index b2b6d211..efaa10e8 100644 --- a/assets/js/router.js +++ b/assets/js/router.js @@ -3,7 +3,7 @@ import { navigate, prefetch, router, -} from "https://unpkg.com/million@1.11.3/dist/router.mjs" +} from "https://unpkg.com/million@1.11.5/dist/router.mjs" export const attachSPARouting = (init, rerender) => { // Attach SPA functions to the global Million namespace From f54df35767dcda9bc4853decff86d57323593685 Mon Sep 17 00:00:00 2001 From: Geoffrey Garrett Date: Sun, 3 Jul 2022 20:42:35 +0200 Subject: [PATCH 222/695] Copy to clipboard feature for code block (#152) Co-authored-by: Jacky Zhao --- assets/js/clipboard.js | 38 +++++++++++++++++++++++++++++ assets/js/darkmode.js | 2 +- assets/styles/clipboard.scss | 47 ++++++++++++++++++++++++++++++++++++ content/notes/config.md | 21 +++++++++------- data/config.yaml | 1 + layouts/partials/head.html | 19 ++++++++++++--- 6 files changed, 114 insertions(+), 14 deletions(-) create mode 100644 assets/js/clipboard.js create mode 100644 assets/styles/clipboard.scss diff --git a/assets/js/clipboard.js b/assets/js/clipboard.js new file mode 100644 index 00000000..6389330e --- /dev/null +++ b/assets/js/clipboard.js @@ -0,0 +1,38 @@ +const svgCopy = + ''; +const svgCheck = + ''; + + +const addCopyButtons = () => { + let els = document.getElementsByClassName("highlight"); + // for each highlight + for (let i = 0; i < els.length; i++) { + if (els[i].getElementsByClassName("clipboard-button").length) continue; + + // find pre > code inside els[i] + let codeBlocks = els[i].getElementsByTagName("code"); + + // line numbers are inside first code block + let lastCodeBlock = codeBlocks[codeBlocks.length - 1]; + const button = document.createElement("button"); + button.className = "clipboard-button"; + button.type = "button"; + button.innerHTML = svgCopy; + // remove every second newline from lastCodeBlock.innerText + button.addEventListener("click", () => { + navigator.clipboard.writeText(lastCodeBlock.innerText.replace(/\n\n/g, "\n")).then( + () => { + button.blur(); + button.innerHTML = svgCheck; + setTimeout(() => (button.innerHTML = svgCopy), 2000); + }, + (error) => (button.innerHTML = "Error") + ); + }); + // find chroma inside els[i] + let chroma = els[i].getElementsByClassName("chroma")[0]; + els[i].insertBefore(button, chroma); + console.log(els[i].lastChild) + } +} diff --git a/assets/js/darkmode.js b/assets/js/darkmode.js index 11ce15f7..8168d77e 100644 --- a/assets/js/darkmode.js +++ b/assets/js/darkmode.js @@ -8,7 +8,7 @@ const syntaxTheme = document.querySelector("#theme-link"); if (currentTheme) { document.documentElement.setAttribute('saved-theme', currentTheme); - (currentTheme === 'dark') ? syntaxTheme.href = '{{ $darkSyntax.Permalink }}' : syntaxTheme.href = '{{ $lightSyntax.Permalink }}'; + syntaxTheme.href = currentTheme === 'dark' ? '{{ $darkSyntax.Permalink }}' : '{{ $lightSyntax.Permalink }}'; } const switchTheme = (e) => { diff --git a/assets/styles/clipboard.scss b/assets/styles/clipboard.scss new file mode 100644 index 00000000..7989e248 --- /dev/null +++ b/assets/styles/clipboard.scss @@ -0,0 +1,47 @@ +.clipboard-button { + position: absolute; + display: flex; + float: right; + right: 0; + padding: 0.69em; + margin: 0.5em; + color: var(--outlinegray); + border-color: var(--dark); + background-color: var(--lightgray); + filter: contrast(1.1); + border: 2px solid; + border-radius: 6px; + font-size: 0.8em; + z-index: 1; + opacity: 0; + transition: 0.12s; + + & > svg { + fill: var(--light); + filter: contrast(0.3); + } + + &:hover { + cursor: pointer; + border-color: var(--primary); + + & > svg { + fill: var(--primary); + } + } + + &:focus { + outline: 0; + } +} + +.highlight { + position: relative; + + &:hover > .clipboard-button { + opacity: 1; + transition: 0.2s; + } +} + + diff --git a/content/notes/config.md b/content/notes/config.md index 076857ed..056ae36a 100644 --- a/content/notes/config.md +++ b/content/notes/config.md @@ -28,12 +28,15 @@ enableLinkPreview: true # whether to render titles for code blocks enableCodeBlockTitle: true +# whether to render copy buttons for code blocks +enableCodeBlockCopy: true + # whether to try to process Latex enableLatex: true # whether to enable single-page-app style rendering -# this prevents flahses of unstyled content and overall improves -# smoothness of quartz. More info in issue #109 on GitHub +# this prevents flashes of unstyled content and improves +# smoothness of Quartz. More info in issue #109 on GitHub enableSPA: true # whether to render a footer @@ -83,10 +86,10 @@ To add code block titles with Quartz: ``` **Note** that if `{title=}` is included, and code block titles are not -enabled, no errors will occur and the title attribute will be ignored. +enabled, no errors will occur, and the title attribute will be ignored. ### HTML Favicons -If you would like to customize the favicons of your quartz-based website, you +If you would like to customize the favicons of your Quartz-based website, you can add them to the `data/config.yaml` file. The **default** without any set `favicon` key is: @@ -95,7 +98,7 @@ can add them to the `data/config.yaml` file. The **default** without any set ``` The default can be overridden by defining a value to the `favicon` key in your -`data/config.yaml` file. Here is a `List[Dictionary]` example format, which is +`data/config.yaml` file. For example, here is a `List[Dictionary]` example format, which is equivalent to the default: ```yaml {title="data/config.yaml", linenos=false} @@ -108,7 +111,7 @@ In this format, the keys are identical to their HTML representations. If you plan to add multiple favicons generated by a website (see list below), it may be easier to define it as HTML. Here is an example which appends the -**Apple touch icon** to quartz's default favicon: +**Apple touch icon** to Quartz's default favicon: ```yaml {title="data/config.yaml", linenos=false} favicon: | @@ -118,7 +121,7 @@ favicon: | This second favicon will now be used as a web page icon when someone adds your webpage to the home screen of their Apple device. If you are interested in more -information about the current, and past, standards of favicons, you can read +information about the current and past standards of favicons, you can read [this article](https://www.emergeinteractive.com/insights/detail/the-essentials-of-favicons/). **Note** that all generated favicon paths, defined by the `href` @@ -136,7 +139,7 @@ enableGlobalGraph: false ### Local Graph ### localGraph: - # whether automatically generate a legend + # whether automatically generate a legend enableLegend: false # whether to allow dragging nodes in the graph @@ -181,7 +184,7 @@ paths: Want to go even more in-depth? You can add custom CSS styling and change existing colours through editing `assets/styles/custom.scss`. If you'd like to target specific parts of the site, you can add ids and classes to the HTML partials in `/layouts/partials`. ### Partials -Partials are what dictate what actually gets rendered to the page. Want to change how pages are styled and structured? You can edit the appropriate layout in `/layouts`. +Partials are what dictate what gets rendered to the page. Want to change how pages are styled and structured? You can edit the appropriate layout in `/layouts`. For example, the structure of the home page can be edited through `/layouts/index.html`. To customize the footer, you can edit `/layouts/partials/footer.html` diff --git a/data/config.yaml b/data/config.yaml index e55035a0..7ef35a54 100644 --- a/data/config.yaml +++ b/data/config.yaml @@ -4,6 +4,7 @@ openToc: false enableLinkPreview: true enableLatex: true enableCodeBlockTitle: true +enableCodeBlockCopy: true enableSPA: true enableFooter: true enableContextualBacklinks: true diff --git a/layouts/partials/head.html b/layouts/partials/head.html index e3eebbfe..7dfbd50c 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -54,6 +54,13 @@ {{end}} + {{ if $.Site.Data.config.enableCodeBlockCopy }} + {{ $clipboard := resources.Get "js/clipboard.js" | resources.Fingerprint "md5" | resources.Minify }} + {{ if (findRE " + {{ end }} + {{ end }} + {{$linkIndex := resources.Get "indices/linkIndex.json" | resources.Fingerprint "md5" | resources.Minify | }} {{$contentIndex := resources.Get @@ -85,6 +92,10 @@ const pathWindow = window.location.pathname; const isHome = pathBase == pathWindow; + {{if $.Site.Data.config.enableCodeBlockCopy -}} + addCopyButtons(); + {{ end }} + {{if $.Site.Data.config.enableSPA -}} addTitleToCodeBlocks(); {{ end }} @@ -118,12 +129,12 @@ const init = (doc = document) => { // NOTE: everything within this callback will be executed for initial page navigation. This is a good place to put JavaScript that only replaces DOM nodes. + {{if $.Site.Data.config.enableCodeBlockCopy -}} + addCopyButtons(); + {{ end }} + {{if $.Site.Data.config.enableCodeBlockTitle -}} - {{if $.Site.Data.config.enableSPA -}} addTitleToCodeBlocks(); - {{ else }} - window.addEventListener("DOMContentLoaded", addTitleToCodeBlocks); - {{- end -}} {{- end -}} {{if $.Site.Data.config.enableLatex}} renderMathInElement(doc.body, { From aaf31f419eb167dbb7582fb103be29f0bef95ba9 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Sun, 3 Jul 2022 11:50:13 -0700 Subject: [PATCH 223/695] fix: copy code block logic for non code pages --- layouts/partials/head.html | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/layouts/partials/head.html b/layouts/partials/head.html index 7dfbd50c..0890983b 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -56,9 +56,7 @@ {{ if $.Site.Data.config.enableCodeBlockCopy }} {{ $clipboard := resources.Get "js/clipboard.js" | resources.Fingerprint "md5" | resources.Minify }} - {{ if (findRE " - {{ end }} + {{ end }} From 25a4d3b6e17c2a5f6a935446ea97d06a323f71f6 Mon Sep 17 00:00:00 2001 From: rphla <101242699+rphla@users.noreply.github.com> Date: Wed, 6 Jul 2022 06:39:29 +0800 Subject: [PATCH 224/695] Add GitHub "edit" button (#157) --- data/config.yaml | 2 ++ layouts/_default/single.html | 3 ++- layouts/partials/github.html | 3 +++ 3 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 layouts/partials/github.html diff --git a/data/config.yaml b/data/config.yaml index 7ef35a54..ce9ff0ab 100644 --- a/data/config.yaml +++ b/data/config.yaml @@ -9,6 +9,8 @@ enableSPA: true enableFooter: true enableContextualBacklinks: true enableRecentNotes: false +enableGitHubEdit: false +GHlink: https://github.com/jackyzha0/quartz/tree/hugo/content description: Host your second brain and digital garden for free. Quartz features extremely fast full-text search, Wikilink support, backlinks, local graph, tags, and link previews. diff --git a/layouts/_default/single.html b/layouts/_default/single.html index 91eda290..06507a70 100644 --- a/layouts/_default/single.html +++ b/layouts/_default/single.html @@ -15,7 +15,8 @@
    {{if .Title}}

    {{ .Title }}

    {{end}}

    - Last updated {{if ne .Date .Lastmod}}{{ .Lastmod.Format "January 2, 2006" }}{{else}}Unknown{{end}} + Last updated {{if ne .Date .Lastmod}}{{ .Lastmod.Format "January 2, 2006" }}{{else}}Unknown{{end}}. + {{ partial "github.html" . }}

    } else { @@ -25,17 +25,18 @@ TagList.css = ` display: flex; padding-left: 0; gap: 0.4rem; +} + +.tags > li { + display: inline-block; + margin: 0; + overflow-wrap: normal; +} - & > li { - display: inline-block; - margin: 0; - - & > a { - border-radius: 8px; - border: var(--lightgray) 1px solid; - padding: 0.2rem 0.5rem; - } - } +.tags > li > a { + border-radius: 8px; + background-color: var(--highlight); + padding: 0.2rem 0.5rem; } ` diff --git a/quartz/components/pages/Content.tsx b/quartz/components/pages/Content.tsx index 7856d6ea..d233845a 100644 --- a/quartz/components/pages/Content.tsx +++ b/quartz/components/pages/Content.tsx @@ -5,7 +5,7 @@ import { toJsxRuntime } from "hast-util-to-jsx-runtime" function Content({ tree }: QuartzComponentProps) { // @ts-ignore (preact makes it angry) const content = toJsxRuntime(tree, { Fragment, jsx, jsxs, elementAttributeNameCase: 'html' }) - return
    {content}
    + return
    {content}
    } -export default (() => Content) satisfies QuartzComponentConstructor \ No newline at end of file +export default (() => Content) satisfies QuartzComponentConstructor diff --git a/quartz/components/renderPage.tsx b/quartz/components/renderPage.tsx index 0e0f4c0c..c70f0925 100644 --- a/quartz/components/renderPage.tsx +++ b/quartz/components/renderPage.tsx @@ -17,10 +17,15 @@ interface RenderComponents { export function pageResources(slug: string, staticResources: StaticResources): StaticResources { const baseDir = resolveToRoot(slug) + + const contentIndexPath = baseDir + "/static/contentIndex.json" + const contentIndexScript = `const fetchData = fetch(\`${contentIndexPath}\`).then(data => data.json())` + return { css: [baseDir + "/index.css", ...staticResources.css], js: [ { src: baseDir + "/prescript.js", loadTime: "beforeDOMReady", contentType: "external" }, + { loadTime: "afterDOMReady", contentType: "inline", spaPreserve: true, script: contentIndexScript }, ...staticResources.js, { src: baseDir + "/postscript.js", loadTime: "afterDOMReady", moduleType: 'module', contentType: "external" } ] @@ -32,28 +37,40 @@ export function renderPage(slug: string, componentData: QuartzComponentProps, co const Header = HeaderConstructor() const Body = BodyConstructor() + const LeftComponent = +
    +
    + {left.map(BodyComponent => )} +
    +
    + + const RightComponent = +
    +
    + {right.map(BodyComponent => )} +
    +
    + const doc =
    -
    - {header.map(HeaderComponent => )} -
    -
    - {beforeBody.map(BodyComponent => )} + -
    - {left.map(BodyComponent => )} -
    -
    + {LeftComponent} +
    +
    -
    - {right.map(BodyComponent => )} -
    + {RightComponent} -
    {pageResources.js.filter(resource => resource.loadTime === "afterDOMReady").map(res => JSResourceToScriptElement(res))} diff --git a/quartz/components/scripts/darkmode.inline.ts b/quartz/components/scripts/darkmode.inline.ts index f00a8733..594bd3a9 100644 --- a/quartz/components/scripts/darkmode.inline.ts +++ b/quartz/components/scripts/darkmode.inline.ts @@ -2,7 +2,7 @@ const userPref = window.matchMedia('(prefers-color-scheme: light)').matches ? 'l const currentTheme = localStorage.getItem('theme') ?? userPref document.documentElement.setAttribute('saved-theme', currentTheme) -window.addEventListener('DOMContentLoaded', () => { +document.addEventListener("nav", () => { const switchTheme = (e: any) => { if (e.target.checked) { document.documentElement.setAttribute('saved-theme', 'dark') @@ -16,7 +16,8 @@ window.addEventListener('DOMContentLoaded', () => { // Darkmode toggle const toggleSwitch = document.querySelector('#darkmode-toggle') as HTMLInputElement - toggleSwitch.addEventListener('change', switchTheme, false) + toggleSwitch.removeEventListener('change', switchTheme) + toggleSwitch.addEventListener('change', switchTheme) if (currentTheme === 'dark') { toggleSwitch.checked = true } diff --git a/quartz/components/scripts/graph.inline.ts b/quartz/components/scripts/graph.inline.ts index 27e9a817..169b8c45 100644 --- a/quartz/components/scripts/graph.inline.ts +++ b/quartz/components/scripts/graph.inline.ts @@ -266,9 +266,9 @@ async function renderGraph(container: string, slug: string) { }) } -function renderGlobalGraph() { +async function renderGlobalGraph() { const slug = document.body.dataset["slug"]! - renderGraph("global-graph-container", slug) + await renderGraph("global-graph-container", slug) const container = document.getElementById("global-graph-outer") container?.classList.add("active") @@ -293,7 +293,14 @@ document.addEventListener("nav", async (e: unknown) => { containerIcon?.addEventListener("click", renderGlobalGraph) }) -window.addEventListener('resize', async () => { - const slug = document.body.dataset["slug"]! - await renderGraph("graph-container", slug) +let resizeEventDebounce: number | undefined = undefined +window.addEventListener('resize', () => { + if (resizeEventDebounce) { + clearTimeout(resizeEventDebounce) + } + + resizeEventDebounce = window.setTimeout(async () => { + const slug = document.body.dataset["slug"]! + await renderGraph("graph-container", slug) + }, 50) }) diff --git a/quartz/components/scripts/plausible.inline.ts b/quartz/components/scripts/plausible.inline.ts new file mode 100644 index 00000000..60817c29 --- /dev/null +++ b/quartz/components/scripts/plausible.inline.ts @@ -0,0 +1,3 @@ +import Plausible from 'plausible-tracker' +const { trackPageview } = Plausible() +document.addEventListener("nav", () => trackPageview()) diff --git a/quartz/components/scripts/popover.inline.ts b/quartz/components/scripts/popover.inline.ts index 655831db..b3889955 100644 --- a/quartz/components/scripts/popover.inline.ts +++ b/quartz/components/scripts/popover.inline.ts @@ -1,5 +1,24 @@ import { computePosition, flip, inline, shift } from "@floating-ui/dom" +// from micromorph/src/utils.ts +// https://github.com/natemoo-re/micromorph/blob/main/src/utils.ts#L5 +export function normalizeRelativeURLs( + el: Element | Document, + base: string | URL +) { + const update = (el: Element, attr: string, base: string | URL) => { + el.setAttribute(attr, new URL(el.getAttribute(attr)!, base).pathname) + } + + el.querySelectorAll('[href^="./"], [href^="../"]').forEach((item) => + update(item, 'href', base) + ) + + el.querySelectorAll('[src^="./"], [src^="../"]').forEach((item) => + update(item, 'src', base) + ) +} + document.addEventListener("nav", () => { const links = [...document.getElementsByClassName("internal")] as HTMLLinkElement[] const p = new DOMParser() @@ -41,6 +60,7 @@ document.addEventListener("nav", () => { if (!contents) return const html = p.parseFromString(contents, "text/html") + normalizeRelativeURLs(html, targetUrl) const elts = [...html.getElementsByClassName("popover-hint")] if (elts.length === 0) return @@ -54,11 +74,13 @@ document.addEventListener("nav", () => { setPosition(popoverElement) link.appendChild(popoverElement) link.dataset.fetchedPopover = "true" - - const heading = popoverInner.querySelector(hash) as HTMLElement | null - if (heading) { - // leave ~12px of buffer when scrolling to a heading - popoverInner.scroll({ top: heading.offsetTop - 12, behavior: 'instant' }) + + if (hash !== "") { + const heading = popoverInner.querySelector(hash) as HTMLElement | null + if (heading) { + // leave ~12px of buffer when scrolling to a heading + popoverInner.scroll({ top: heading.offsetTop - 12, behavior: 'instant' }) + } } }) } diff --git a/quartz/components/styles/backlinks.scss b/quartz/components/styles/backlinks.scss index 3344a7b5..80baefc0 100644 --- a/quartz/components/styles/backlinks.scss +++ b/quartz/components/styles/backlinks.scss @@ -7,13 +7,9 @@ & > ul { list-style: none; padding: 0; - margin: 0; + margin: 0.5rem 0; & > li { - margin: 0.5rem 0; - padding: 0.25rem 1rem; - border: var(--lightgray) 1px solid; - border-radius: 5px; & > a { background-color: transparent; } diff --git a/quartz/components/styles/footer.scss b/quartz/components/styles/footer.scss index d104e508..16df545d 100644 --- a/quartz/components/styles/footer.scss +++ b/quartz/components/styles/footer.scss @@ -1,6 +1,8 @@ footer { text-align: left; opacity: 0.8; + margin-bottom: 4rem; + & ul { list-style: none; margin: 0; diff --git a/quartz/components/styles/graph.scss b/quartz/components/styles/graph.scss index 244f2e4e..4533a845 100644 --- a/quartz/components/styles/graph.scss +++ b/quartz/components/styles/graph.scss @@ -11,6 +11,7 @@ height: 250px; margin: 0.5em 0; position: relative; + overflow: hidden; & > #global-graph-icon { color: var(--dark); @@ -30,10 +31,6 @@ background-color: var(--lightgray); } } - - & > #graph-container > svg { - margin-bottom: -5px; - } } & > #global-graph-outer { diff --git a/quartz/components/styles/listPage.scss b/quartz/components/styles/listPage.scss index a5d0a915..18238150 100644 --- a/quartz/components/styles/listPage.scss +++ b/quartz/components/styles/listPage.scss @@ -8,29 +8,36 @@ li.section-li { margin-bottom: 1em; & > .section { - display: flex; - align-items: center; + display: grid; + grid-template-columns: 6em 3fr 1fr; @media all and (max-width: 600px) { - & .tags { + & > .tags { display: none; } } - & h3 > a { - font-weight: 700; - margin: 0; - background-color: transparent; + & > .tags { + justify-self: end; + margin-left: 1rem; } - & p { + & > .desc a { + background-color: transparent; + } + + & > .meta { margin: 0; - padding-right: 1em; flex-basis: 6em; + opacity: 0.6; } } - - & .meta { - opacity: 0.6; - } +} + +// modifications in popover context +.popover .section { + grid-template-columns: 6em 1fr !important; + & > .tags { + display: none; + } } diff --git a/quartz/components/styles/popover.scss b/quartz/components/styles/popover.scss index 5ae09fe4..80bdfad4 100644 --- a/quartz/components/styles/popover.scss +++ b/quartz/components/styles/popover.scss @@ -24,7 +24,7 @@ height: 20rem; padding: 0 1rem 1rem 1rem; font-weight: initial; - line-height: initial; + line-height: normal; font-size: initial; font-family: var(--bodyFont); border: 1px solid var(--gray); diff --git a/quartz/components/styles/search.scss b/quartz/components/styles/search.scss index 32d57443..cbf982a6 100644 --- a/quartz/components/styles/search.scss +++ b/quartz/components/styles/search.scss @@ -1,8 +1,7 @@ .search { min-width: 5rem; - max-width: 12rem; + max-width: 14rem; flex-grow: 0.3; - margin: 0 1.5rem; & > #search-icon { background-color: var(--lightgray); diff --git a/quartz/components/types.ts b/quartz/components/types.ts index c7584b6f..d1c153dd 100644 --- a/quartz/components/types.ts +++ b/quartz/components/types.ts @@ -8,7 +8,7 @@ export type QuartzComponentProps = { externalResources: StaticResources fileData: QuartzPluginData cfg: GlobalConfiguration - children: QuartzComponent[] | JSX.Element[] + children: (QuartzComponent | JSX.Element)[] tree: Node allFiles: QuartzPluginData[] } diff --git a/quartz/path.ts b/quartz/path.ts index 4755687e..81cdb3a3 100644 --- a/quartz/path.ts +++ b/quartz/path.ts @@ -5,7 +5,17 @@ function slugSegment(s: string): string { return s.replace(/\s/g, '-') } +// on the client, 'index' isn't ever rendered so we should clean it up +export function clientSideSlug(fp: string): string { + if (fp.endsWith("index")) { + fp = fp.slice(0, -"index".length) + } + + return fp +} + export function trimPathSuffix(fp: string): string { + fp = clientSideSlug(fp) let [cleanPath, anchor] = fp.split("#", 2) anchor = anchor === undefined ? "" : "#" + anchor @@ -27,9 +37,6 @@ export function slugify(s: string): string { // resolve /a/b/c to ../../ export function resolveToRoot(slug: string): string { let fp = trimPathSuffix(slug) - if (fp.endsWith("index")) { - fp = fp.slice(0, -"index".length) - } if (fp === "") { return "." diff --git a/quartz/plugins/emitters/contentIndex.ts b/quartz/plugins/emitters/contentIndex.ts index f75334a4..cf427569 100644 --- a/quartz/plugins/emitters/contentIndex.ts +++ b/quartz/plugins/emitters/contentIndex.ts @@ -36,7 +36,6 @@ function generateRSSFeed(cfg: GlobalConfiguration, idx: ContentIndex): string { const base = cfg.canonicalUrl ?? "" const root = `https://${base}` - // TODO: ogimage const createURLEntry = (slug: string, content: ContentDetails): string => ` ${content.title} ${root}/${slug} diff --git a/quartz/plugins/index.ts b/quartz/plugins/index.ts index 88158113..c55e4dd7 100644 --- a/quartz/plugins/index.ts +++ b/quartz/plugins/index.ts @@ -1,29 +1,17 @@ import { GlobalConfiguration } from '../cfg' import { QuartzComponent } from '../components/types' import { StaticResources } from '../resources' -import { googleFontHref, joinStyles } from '../theme' +import { joinStyles } from '../theme' import { EmitCallback, PluginTypes } from './types' import styles from '../styles/base.scss' -// @ts-ignore -import spaRouterScript from '../components/scripts/spa.inline' -// @ts-ignore -import popoverScript from '../components/scripts/popover.inline' -import popoverStyle from '../components/styles/popover.scss' - export type ComponentResources = { css: string[], beforeDOMLoaded: string[], afterDOMLoaded: string[] } -function joinScripts(scripts: string[]): string { - // wrap with iife to prevent scope collision - return scripts.map(script => `(function () {${script}})();`).join("\n") -} - -export function emitComponentResources(cfg: GlobalConfiguration, resources: StaticResources, plugins: PluginTypes, emit: EmitCallback) { - const fps: string[] = [] +export function getComponentResources(plugins: PluginTypes): ComponentResources { const allComponents: Set = new Set() for (const emitter of plugins.emitters) { const components = emitter.getQuartzComponents() @@ -50,41 +38,35 @@ export function emitComponentResources(cfg: GlobalConfiguration, resources: Stat componentResources.afterDOMLoaded.push(afterDOMLoaded) } } - - if (cfg.enablePopovers) { - componentResources.afterDOMLoaded.push(popoverScript) - componentResources.css.push(popoverStyle) - } - if (cfg.enableSPA) { - componentResources.afterDOMLoaded.push(spaRouterScript) - } else { - componentResources.afterDOMLoaded.push(` - window.spaNavigate = (url, _) => window.location.assign(url) - const event = new CustomEvent("nav", { detail: { slug: document.body.dataset.slug } }) - document.dispatchEvent(event)` - ) - } + return componentResources +} - emit({ - slug: "index", - ext: ".css", - content: joinStyles(cfg.theme, styles, ...componentResources.css) - }) - emit({ - slug: "prescript", - ext: ".js", - content: joinScripts(componentResources.beforeDOMLoaded) - }) - emit({ - slug: "postscript", - ext: ".js", - content: joinScripts(componentResources.afterDOMLoaded) - }) +function joinScripts(scripts: string[]): string { + // wrap with iife to prevent scope collision + return scripts.map(script => `(function () {${script}})();`).join("\n") +} - fps.push("index.css", "prescript.js", "postscript.js") - resources.css.push(googleFontHref(cfg.theme)) +export async function emitComponentResources(cfg: GlobalConfiguration, res: ComponentResources, emit: EmitCallback): Promise { + const fps = await Promise.all([ + emit({ + slug: "index", + ext: ".css", + content: joinStyles(cfg.theme, styles, ...res.css) + }), + emit({ + slug: "prescript", + ext: ".js", + content: joinScripts(res.beforeDOMLoaded) + }), + emit({ + slug: "postscript", + ext: ".js", + content: joinScripts(res.afterDOMLoaded) + }) + ]) return fps + } export function getStaticResourcesFromPlugins(plugins: PluginTypes) { diff --git a/quartz/plugins/transformers/gfm.ts b/quartz/plugins/transformers/gfm.ts index 54f8ca67..f966e58b 100644 --- a/quartz/plugins/transformers/gfm.ts +++ b/quartz/plugins/transformers/gfm.ts @@ -1,4 +1,3 @@ -import { PluggableList } from "unified" import remarkGfm from "remark-gfm" import smartypants from 'remark-smartypants' import { QuartzTransformerPlugin } from "../types" @@ -20,14 +19,14 @@ export const GitHubFlavoredMarkdown: QuartzTransformerPlugin | return { name: "GitHubFlavoredMarkdown", markdownPlugins() { - return opts.enableSmartyPants ? [remarkGfm] : [remarkGfm, smartypants] + return opts.enableSmartyPants ? [remarkGfm, smartypants] : [remarkGfm] }, htmlPlugins() { if (opts.linkHeadings) { return [rehypeSlug, [rehypeAutolinkHeadings, { behavior: 'append', content: { type: 'text', - value: ' §' + value: ' §', } }]] } else { diff --git a/quartz/plugins/transformers/links.ts b/quartz/plugins/transformers/links.ts index 13914523..b8a800a7 100644 --- a/quartz/plugins/transformers/links.ts +++ b/quartz/plugins/transformers/links.ts @@ -1,5 +1,5 @@ import { QuartzTransformerPlugin } from "../types" -import { relativeToRoot, slugify, trimPathSuffix } from "../../path" +import { clientSideSlug, relativeToRoot, slugify, trimPathSuffix } from "../../path" import path from "path" import { visit } from 'unist-util-visit' import isAbsoluteUrl from "is-absolute-url" @@ -27,7 +27,7 @@ export const CrawlLinks: QuartzTransformerPlugin | undefined> = htmlPlugins() { return [() => { return (tree, file) => { - const curSlug = file.data.slug! + const curSlug = clientSideSlug(file.data.slug!) const transformLink = (target: string) => { const targetSlug = slugify(decodeURI(target).trim()) if (opts.markdownLinkResolution === 'relative' && !path.isAbsolute(targetSlug)) { @@ -49,7 +49,6 @@ export const CrawlLinks: QuartzTransformerPlugin | undefined> = let dest = node.properties.href node.properties.className = isAbsoluteUrl(dest) ? "external" : "internal" - // don't process external links or intra-document anchors if (!(isAbsoluteUrl(dest) || dest.startsWith("#"))) { node.properties.href = transformLink(dest) diff --git a/quartz/processors/emit.ts b/quartz/processors/emit.ts index e1438fae..7150f5ec 100644 --- a/quartz/processors/emit.ts +++ b/quartz/processors/emit.ts @@ -1,13 +1,69 @@ import path from "path" import fs from "fs" -import { QuartzConfig } from "../cfg" +import { GlobalConfiguration, QuartzConfig } from "../cfg" import { PerfTimer } from "../perf" -import { emitComponentResources, getStaticResourcesFromPlugins } from "../plugins" +import { ComponentResources, emitComponentResources, getComponentResources, getStaticResourcesFromPlugins } from "../plugins" import { EmitCallback } from "../plugins/types" import { ProcessedContent } from "../plugins/vfile" import { QUARTZ, slugify } from "../path" import { globbyStream } from "globby" import chalk from "chalk" +import { googleFontHref } from '../theme' + +// @ts-ignore +import spaRouterScript from '../components/scripts/spa.inline' +// @ts-ignore +import plausibleScript from '../components/scripts/plausible.inline' +// @ts-ignore +import popoverScript from '../components/scripts/popover.inline' +import popoverStyle from '../components/styles/popover.scss' +import { StaticResources } from "../resources" + +function addGlobalPageResources(cfg: GlobalConfiguration, staticResources: StaticResources, componentResources: ComponentResources) { + // font and other resources + staticResources.css.push(googleFontHref(cfg.theme)) + + // popovers + if (cfg.enablePopovers) { + componentResources.afterDOMLoaded.push(popoverScript) + componentResources.css.push(popoverStyle) + } + + if (cfg.analytics?.provider === "google") { + const tagId = cfg.analytics.tagId + staticResources.js.push({ + src: `https://www.googletagmanager.com/gtag/js?id=${tagId}`, + contentType: 'external', + loadTime: 'afterDOMReady', + }) + componentResources.afterDOMLoaded.push(` + window.dataLayer = window.dataLayer || []; + function gtag() { dataLayer.push(arguments); } + gtag(\`js\`, new Date()); + gtag(\`config\`, \`${tagId}\`, { send_page_view: false }); + + document.addEventListener(\`nav\`, () => { + gtag(\`event\`, \`page_view\`, { + page_title: document.title, + page_location: location.href, + }); + });` + ) + } else if (cfg.analytics?.provider === "plausible") { + componentResources.afterDOMLoaded.push(plausibleScript) + } + + // spa + if (cfg.enableSPA) { + componentResources.afterDOMLoaded.push(spaRouterScript) + } else { + componentResources.afterDOMLoaded.push(` + window.spaNavigate = (url, _) => window.location.assign(url) + const event = new CustomEvent("nav", { detail: { slug: document.body.dataset.slug } }) + document.dispatchEvent(event)` + ) + } +} export async function emitContent(contentFolder: string, output: string, cfg: QuartzConfig, content: ProcessedContent[], verbose: boolean) { const perf = new PerfTimer() @@ -19,9 +75,25 @@ export async function emitContent(contentFolder: string, output: string, cfg: Qu return pathToPage } + // initialize from plugins const staticResources = getStaticResourcesFromPlugins(cfg.plugins) - emitComponentResources(cfg.configuration, staticResources, cfg.plugins, emit) + // component specific scripts and styles + const componentResources = getComponentResources(cfg.plugins) + // important that this goes *after* component scripts + // as the "nav" event gets triggered here and we should make sure + // that everyone else had the chance to register a listener for it + addGlobalPageResources(cfg.configuration, staticResources, componentResources) + + // emit in one go + const emittedResources = await emitComponentResources(cfg.configuration, componentResources, emit) + if (verbose) { + for (const file of emittedResources) { + console.log(`[emit:Resources] ${file}`) + } + } + + // emitter plugins let emittedFiles = 0 for (const emitter of cfg.plugins.emitters) { try { diff --git a/quartz/resources.tsx b/quartz/resources.tsx index 78ae10b6..37807518 100644 --- a/quartz/resources.tsx +++ b/quartz/resources.tsx @@ -3,7 +3,8 @@ import { JSX } from "preact/jsx-runtime" export type JSResource = { loadTime: 'beforeDOMReady' | 'afterDOMReady' - moduleType?: 'module' + moduleType?: 'module', + spaPreserve?: boolean } & ({ src: string contentType: 'external' @@ -14,11 +15,12 @@ export type JSResource = { export function JSResourceToScriptElement(resource: JSResource, preserve?: boolean): JSX.Element { const scriptType = resource.moduleType ?? 'application/javascript' + const spaPreserve = preserve ?? resource.spaPreserve if (resource.contentType === 'external') { - return + return } } diff --git a/quartz/styles/base.scss b/quartz/styles/base.scss index 45e6370c..db0299be 100644 --- a/quartz/styles/base.scss +++ b/quartz/styles/base.scss @@ -11,6 +11,9 @@ body { box-sizing: border-box; background-color: var(--light); font-family: var(--bodyFont); + --pageWidth: 800px; + --sidePanelWidth: 400px; + --topSpacing: 6rem; } .text-highlight { @@ -27,7 +30,7 @@ p, ul, text, a, tr, td, li, ol, ul, .katex { a { font-weight: 600; text-decoration: none; - transition: all 0.2s ease; + transition: color 0.2s ease; color: var(--secondary); &:hover { @@ -43,34 +46,48 @@ a { } .page { - margin: 6rem 35vw 6rem 20vw; - max-width: 1000px; - position: relative; + & > .page-header { + max-width: var(--pageWidth); + margin: var(--topSpacing) auto 0 auto; + } - & .left, & .right { - position: fixed; - height: 100vh; - overflow-y: scroll; - box-sizing: border-box; + & > #quartz-body { + width: 100%; display: flex; - flex-direction: column; - top: 0; - gap: 2rem; - padding: 6rem; - } - - & .left { - left: 0; - padding-left: 10vw; - width: 20vw; - } - & .right { - right: 0; - padding-right: 10vw; - width: 35vw; - } + & .left, & .right { + flex: 1; + width: calc(calc(100vw - var(--pageWidth)) / 2); + } + & .left-inner, & .right-inner { + display: flex; + flex-direction: column; + gap: 2rem; + top: 0; + width: var(--sidePanelWidth); + margin-top: calc(var(--topSpacing)); + box-sizing: border-box; + padding: 0 4rem; + position: fixed; + } + + & .left-inner { + left: calc(calc(100vw - var(--pageWidth)) / 2 - var(--sidePanelWidth)); + } + + & .right-inner { + right: calc(calc(100vw - var(--pageWidth)) / 2 - var(--sidePanelWidth)); + } + + & .center { + width: var(--pageWidth); + margin: 0 auto; + } + } +} + +.page { @media all and (max-width: 1200px) { margin: 25px 5vw; & .left, & .right { @@ -89,9 +106,26 @@ a { & > h1 { font-size: 2rem; } + + // darkmode diagrams + & svg { + stroke: var(--dark); + } + + & ul:has(input[type='checkbox']) { + list-style-type: none; + padding-left: 0; + } } } +input[type="checkbox"] { + transform: translateY(2px); + color: var(--secondary); + border-color: var(--lightgray); + background-color: var(--light); +} + blockquote { margin: 1rem 0; border-left: 3px solid var(--secondary); @@ -120,7 +154,7 @@ thead { } h1, h2, h3, h4, h5, h6 { - &[id] > a { + &[id] > a[href^="#"] { margin: 0 0.5rem; opacity: 0; transition: opacity 0.2s ease; From ab9da02c60c962128820e6874e6f07c98bc3dda7 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Tue, 4 Jul 2023 10:08:32 -0700 Subject: [PATCH 357/695] fix indexing causing main thread freeze, various polish --- package-lock.json | 9 ++ package.json | 1 + quartz.config.ts | 4 +- quartz/components/DesktopOnly.tsx | 20 +++ quartz/components/Graph.tsx | 18 +-- quartz/components/Head.tsx | 4 +- quartz/components/MobileOnly.tsx | 20 +++ quartz/components/PageList.tsx | 2 +- quartz/components/ReadingTime.tsx | 3 +- quartz/components/TableOfContents.tsx | 2 +- quartz/components/TagList.tsx | 1 + quartz/components/index.ts | 6 +- quartz/components/pages/FolderContent.tsx | 10 +- quartz/components/pages/TagContent.tsx | 9 +- quartz/components/renderPage.tsx | 2 +- quartz/components/scripts/graph.inline.ts | 18 +-- quartz/components/scripts/popover.inline.ts | 130 ++++++++++---------- quartz/components/scripts/search.inline.ts | 8 +- quartz/components/styles/darkmode.scss | 1 + quartz/components/styles/graph.scss | 2 +- quartz/components/styles/listPage.scss | 6 +- quartz/components/styles/popover.scss | 4 +- quartz/components/styles/search.scss | 4 +- quartz/path.ts | 8 +- quartz/plugins/emitters/contentIndex.ts | 7 +- quartz/plugins/emitters/folderPage.tsx | 3 +- quartz/plugins/emitters/tagPage.tsx | 3 +- quartz/plugins/index.ts | 26 ++-- quartz/processors/emit.ts | 10 +- quartz/resources.tsx | 2 +- quartz/styles/base.scss | 40 +++--- quartz/styles/variables.scss | 5 + quartz/theme.ts | 8 +- 33 files changed, 255 insertions(+), 141 deletions(-) create mode 100644 quartz/components/DesktopOnly.tsx create mode 100644 quartz/components/MobileOnly.tsx create mode 100644 quartz/styles/variables.scss diff --git a/package-lock.json b/package-lock.json index 92e22eb0..fb8f23c7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,6 +25,7 @@ "mdast-util-find-and-replace": "^2.2.2", "mdast-util-to-string": "^3.2.0", "micromorph": "^0.4.5", + "plausible-tracker": "^0.3.8", "preact": "^10.14.1", "preact-render-to-string": "^6.0.3", "pretty-time": "^1.1.0", @@ -3619,6 +3620,14 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/plausible-tracker": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/plausible-tracker/-/plausible-tracker-0.3.8.tgz", + "integrity": "sha512-lmOWYQ7s9KOUJ1R+YTOR3HrjdbxIS2Z4de0P/Jx2dQPteznJl2eX3tXxKClpvbfyGP59B5bbhW8ftN59HbbFSg==", + "engines": { + "node": ">=10" + } + }, "node_modules/preact": { "version": "10.15.1", "resolved": "https://registry.npmjs.org/preact/-/preact-10.15.1.tgz", diff --git a/package.json b/package.json index 614bb761..689548d8 100644 --- a/package.json +++ b/package.json @@ -41,6 +41,7 @@ "mdast-util-find-and-replace": "^2.2.2", "mdast-util-to-string": "^3.2.0", "micromorph": "^0.4.5", + "plausible-tracker": "^0.3.8", "preact": "^10.14.1", "preact-render-to-string": "^6.0.3", "pretty-time": "^1.1.0", diff --git a/quartz.config.ts b/quartz.config.ts index 58c1d9cd..18f2533e 100644 --- a/quartz.config.ts +++ b/quartz.config.ts @@ -23,8 +23,8 @@ const contentPageLayout: PageLayout = { left: [ Component.PageTitle(), Component.Search(), - Component.TableOfContents(), - Component.Darkmode() + Component.Darkmode(), + Component.DesktopOnly(Component.TableOfContents()), ], right: [ Component.Graph(), diff --git a/quartz/components/DesktopOnly.tsx b/quartz/components/DesktopOnly.tsx new file mode 100644 index 00000000..a1c5dae9 --- /dev/null +++ b/quartz/components/DesktopOnly.tsx @@ -0,0 +1,20 @@ +import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types" + +export default ((component?: QuartzComponent) => { + if (component) { + const Component = component + function DesktopOnly(props: QuartzComponentProps) { + return
    + +
    + } + + DesktopOnly.displayName = component.displayName + DesktopOnly.afterDOMLoaded = component?.afterDOMLoaded + DesktopOnly.beforeDOMLoaded = component?.beforeDOMLoaded + DesktopOnly.css = component?.css + return DesktopOnly + } else { + return () => <> + } +}) satisfies QuartzComponentConstructor diff --git a/quartz/components/Graph.tsx b/quartz/components/Graph.tsx index 01461882..e7f1df23 100644 --- a/quartz/components/Graph.tsx +++ b/quartz/components/Graph.tsx @@ -25,23 +25,23 @@ const defaultOptions: GraphOptions = { drag: true, zoom: true, depth: 1, - scale: 1.2, - repelForce: 2, - centerForce: 1, + scale: 1.1, + repelForce: 0.5, + centerForce: 0.3, linkDistance: 30, fontSize: 0.6, - opacityScale: 3 + opacityScale: 1 }, globalGraph: { drag: true, zoom: true, depth: -1, - scale: 1.2, - repelForce: 1, - centerForce: 1, + scale: 0.9, + repelForce: 0.5, + centerForce: 0.3, linkDistance: 30, - fontSize: 0.5, - opacityScale: 3 + fontSize: 0.6, + opacityScale: 1 } } diff --git a/quartz/components/Head.tsx b/quartz/components/Head.tsx index f8439a05..bfc7bae2 100644 --- a/quartz/components/Head.tsx +++ b/quartz/components/Head.tsx @@ -1,10 +1,10 @@ -import { resolveToRoot } from "../path" +import { clientSideSlug, resolveToRoot } from "../path" import { JSResourceToScriptElement } from "../resources" import { QuartzComponentConstructor, QuartzComponentProps } from "./types" export default (() => { function Head({ fileData, externalResources }: QuartzComponentProps) { - const slug = fileData.slug! + const slug = clientSideSlug(fileData.slug!) const title = fileData.frontmatter?.title ?? "Untitled" const description = fileData.description ?? "No description provided" const { css, js } = externalResources diff --git a/quartz/components/MobileOnly.tsx b/quartz/components/MobileOnly.tsx new file mode 100644 index 00000000..b75fd76a --- /dev/null +++ b/quartz/components/MobileOnly.tsx @@ -0,0 +1,20 @@ +import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types" + +export default ((component?: QuartzComponent) => { + if (component) { + const Component = component + function MobileOnly(props: QuartzComponentProps) { + return
    + +
    + } + + MobileOnly.displayName = component.displayName + MobileOnly.afterDOMLoaded = component?.afterDOMLoaded + MobileOnly.beforeDOMLoaded = component?.beforeDOMLoaded + MobileOnly.css = component?.css + return MobileOnly + } else { + return () => <> + } +}) satisfies QuartzComponentConstructor diff --git a/quartz/components/PageList.tsx b/quartz/components/PageList.tsx index 3c39bee9..b92720de 100644 --- a/quartz/components/PageList.tsx +++ b/quartz/components/PageList.tsx @@ -23,7 +23,7 @@ function byDateAndAlphabetical(f1: QuartzPluginData, f2: QuartzPluginData): numb export function PageList({ fileData, allFiles }: QuartzComponentProps) { const slug = fileData.slug! - return
    ``` -This piece of HTML represents an article with a leading header that says "An article header" and a paragraph that contains the text "Some content". This is normally combined with CSS to style the page and JavaScript to add interactivity. +This piece of HTML represents an article with a leading header that says "An article header" and a paragraph that contains the text "Some content". This is combined with CSS to style the page and JavaScript to add interactivity. -However, HTML doesn't let you create reusable templates. If you wanted to create a new page, you would need to copy and paste the above snippet and edit the header and content yourself. This isn't great if we have a lot of content on our site that shares a lot of similar layout. The smart people who created React also had similar thoughts, inventing the concept of JSX Components to solve the code duplication problem. +However, HTML doesn't let you create reusable templates. If you wanted to create a new page, you would need to copy and paste the above snippet and edit the header and content yourself. This isn't great if we have a lot of content on our site that shares a lot of similar layout. The smart people who created React also had similar complaints and invented the concept of Components -- JavaScript functions that return JSX -- to solve the code duplication problem. In effect, components allow you to write a JavaScript function that takes some data and produces HTML as an output. **While Quartz doesn't use React, it uses the same component concept to allow you to easily express layout templates in your Quartz site.** @@ -26,7 +26,7 @@ In effect, components allow you to write a JavaScript function that takes some d Component files are written in `.tsx` files that live in the `quartz/components` folder. These are re-exported in `quartz/components/index.ts` so you can use them in layouts and other components more easily. -Each component file should have a default export that satisfies the `QuartzComponentConstructor` function signature. It is a function that takes in a single optional parameter `opts` and returns a Quartz Component. The type of the parameters `ops` is defined by the interface `Options` which you as the component creator also decide. +Each component file should have a default export that satisfies the `QuartzComponentConstructor` function signature. It's a function that takes in a single optional parameter `opts` and returns a Quartz Component. The type of the parameters `opts` is defined by the interface `Options` which you as the component creator also decide. In your component, you can use the values from the configuration option to change the rendering behaviour inside of your component. For example, the component in the code snippet below will not render if the `favouriteNumber` option is below 0. @@ -57,7 +57,7 @@ export default ((userOpts?: Options) => { The Quartz component itself (lines 11-17 highlighted above) looks like a React component. It takes in properties (sometimes called [props](https://react.dev/learn/passing-props-to-a-component)) and returns JSX. -All Quartz components accept the same set of props which are defined in `QuartzComponentProps`: +All Quartz components accept the same set of props: ```tsx title="quartz/components/types.ts" // simplified for sake of demonstration @@ -82,7 +82,7 @@ export type QuartzComponentProps = { Quartz components can also define a `.css` property on the actual function component which will get picked up by Quartz. This is expected to be a CSS string which can either be inlined or imported from a `.scss` file. -Note that inlined styles **must** be plain vanilla CSS. +Note that inlined styles **must** be plain vanilla CSS: ```tsx {6-10} title="quartz/components/YourComponent.tsx" export default (() => { @@ -100,7 +100,7 @@ export default (() => { }) satisfies QuartzComponentConstructor ``` -Imported styles, however, can be from SCSS files. +Imported styles, however, can be from SCSS files: ```tsx {1-2,9} title="quartz/components/YourComponent.tsx" // assuming your stylesheet is in quartz/components/styles/YourComponent.scss diff --git a/content/authoring content.md b/content/authoring content.md index b5b154c0..4e3c3c83 100644 --- a/content/authoring content.md +++ b/content/authoring content.md @@ -4,15 +4,15 @@ title: Authoring Content All of the content in your Quartz should go in the `/content` folder. The content for the home page of your Quartz lives in `content/index.md`. If you've [[index#🪴 Get Started|setup Quartz]] already, this folder should already be initailized. Any Markdown in this folder will get processed by Quartz. -It is recommended that you use [Obsidian](https://obsidian.md/) as a way to edit and maintain your Quartz. It comes with a nice editor and graphical interface to preview all of your local files and allow you to easily edit and link across files. +It is recommended that you use [Obsidian](https://obsidian.md/) as a way to edit and maintain your Quartz. It comes with a nice editor and graphical interface to preview, edit, and link your local files and attachments. Got everything setup? Let's [[build]] and preview your Quartz locally! ## Syntax -As Quartz uses Markdown files as the main way of writing content, it fully supports Markdown syntax along with a few extensions like [Github Flavored Markdown](https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax) (footnotes, strikethrough, tables, tasklists) and [Obsidian Flavored Markdown](https://help.obsidian.md/Editing+and+formatting/Obsidian+Flavored+Markdown) ([[callouts]], [[wikilinks]]). +As Quartz uses Markdown files as the main way of writing content, it fully supports Markdown syntax. By default, Quartz also ships with a few syntax extensions like [Github Flavored Markdown](https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax) (footnotes, strikethrough, tables, tasklists) and [Obsidian Flavored Markdown](https://help.obsidian.md/Editing+and+formatting/Obsidian+Flavored+Markdown) ([[callouts]], [[wikilinks]]). -Additionally, Quartz also allows you to specify additional metadata in your notes called **frontmatter** using YAML. +Additionally, Quartz also allows you to specify additional metadata in your notes called **frontmatter**. ```md title="content/note.md" --- @@ -27,7 +27,7 @@ The rest of your content lives here. You can use **Markdown** here :) Some common frontmatter fields that are natively supported by Quartz: -- `title`: Quartz will use the name of the file as the title if this isn't provided. If it is provided, it should be a string. -- `draft`: Whether to publish the page or not. This is one way to make [[private pages|pages private]] in Quartz. +- `title`: Title of the page. If it isn't provided, Quartz will use the name of the file as the title. - `aliases`: Other names for this note. This is a list of strings. -- `date`: A string representing the day the note was published. Normally uses `YYYY-MM-DD` format but other formats _may_ work. +- `draft`: Whether to publish the page or not. This is one way to make [[private pages|pages private]] in Quartz. +- `date`: A string representing the day the note was published. Normally uses `YYYY-MM-DD` format. diff --git a/content/build.md b/content/build.md index bce9d546..14476875 100644 --- a/content/build.md +++ b/content/build.md @@ -2,17 +2,13 @@ title: "Building your Quartz" --- -Once you've [[index#🪴 Get Started|initialized]] Quartz, let's see what it looks like locally. +Once you've [[index#🪴 Get Started|initialized]] Quartz, let's see what it looks like locally: ```bash npx quartz build --serve ``` -Then, open a web browser and visit `http://localhost:8080/` to view it. - -Want to change how Quartz looks? You can edit `quartz.config.ts` to customize and configure your Quartz, including styles, layout, and more. Read the [[configuration]] page for more information on what each field in the configuration does. - -Once you're happy with it, let's see how to [[hosting|deploy Quartz to the web]]! +This will start a local web server to run your Quartz on your computer. Open a web browser and visit `http://localhost:8080/` to view it. > [!hint] Flags and options > For full help options, you can run `npx quartz build --help`. diff --git a/content/configuration.md b/content/configuration.md index cdf4459e..182a87b2 100644 --- a/content/configuration.md +++ b/content/configuration.md @@ -2,12 +2,12 @@ title: Configuration --- -Quartz is meant to be extremely configurable, even if you don't know any coding. Most of the configuration you should need can be done by just editing `quartz.config.ts`. +Quartz is meant to be extremely configurable, even if you don't know any coding. Most of the configuration you should need can be done by just editing `quartz.config.ts` or changing [[layout|the layout]] in `quartz.layout.ts`. > [!tip] -> If you edit this file using a text-editor that has TypeScript language support like VSCode, it will warn you when you you've made an error in your configuration, helping you avoid configuration mistakes! +> If you edit Quartz configuration using a text-editor that has TypeScript language support like VSCode, it will warn you when you you've made an error in your configuration, helping you avoid configuration mistakes! -This configuration can be broken down into two main parts: +The configuration of Quartz can be broken down into two main parts: ```ts title="quartz.config.ts" const config: QuartzConfig = { @@ -20,15 +20,17 @@ const config: QuartzConfig = { This part of the configuration concerns anything that can affect the whole site. The following is a list breaking down all the things you can configure: -- `pageTitle`: used as an anchor to return to the home page. This is also used when generating the [[RSS Feed]] for your site. +- `pageTitle`: title of the site. This is also used when generating the [[RSS Feed]] for your site. - `enableSPA`: whether to enable [[SPA Routing]] on your site. - `enablePopovers`: whether to enable [[popover previews]] on your site. - `analytics`: what to use for analytics on your site. Values can be - `null`: don't use analytics; - `{ provider: 'plausible' }`: use [Plausible](https://plausible.io/), a privacy-friendly alternative to Google Analytics; or - `{ provider: 'google', tagId: }`: use Google Analytics -- `caononicalUrl`: sometimes called `baseURL` in other site generators. This is used for sitemaps and RSS feeds that require an absolute URL to know where the canonical 'home' of your site lives. This is normally the deployed URL of your site (e.g. `https://quartz.jzhao.xyz/` for this site). Note that Quartz 4 will avoid using this as much as possible and use relative URLs whenever it can to make sure your site works no matter _where_ you end up actually deploying it. -- `ignorePatterns`: a list of [glob]() patterns that Quartz should ignore and not search through when looking for files inside the `content` folder. +- `baseUrl`: this is used for sitemaps and RSS feeds that require an absolute URL to know where the canonical 'home' of your site lives. This is normally the deployed URL of your site (e.g. `quartz.jzhao.xyz` for this site). Do not include the protocol (i.e. `https://`) or any leading or trailing slashes. + - This should also include the subpath if you are [[hosting]] on GitHub pages without a custom domain. For example, if my repository is `jackyzha0/quartz`, GitHub pages would deploy to `https://jackyzha0.github.io/quartz` and the `baseUrl` would be `jackyzha0.github.io/quartz` + - Note that Quartz 4 will avoid using this as much as possible and use relative URLs whenever it can to make sure your site works no matter _where_ you end up actually deploying it. +- `ignorePatterns`: a list of [glob]() patterns that Quartz should ignore and not search through when looking for files inside the `content` folder. See [[private pages]] for more details. - `theme`: configure how the site looks. - `typography`: what fonts to use. Any font available on [Google Fonts](https://fonts.google.com/) works here. - `header`: Font to use for headers @@ -77,48 +79,3 @@ transformers: [ ``` If you'd like to make your own plugins, read the guide on [[making plugins]] for more information. - -### Layout - -Certain emitters may also output [HTML](https://developer.mozilla.org/en-US/docs/Web/HTML) files. To enable easy customization, these emitters allow you to fully rearrange the layout of the page. The default page layouts can be found in `quartz.layout.ts`. - -Each page is composed of multiple different sections which contain `QuartzComponents`. The following code snippet lists all of the valid sections that you can add components to: - -```typescript title="quartz/cfg.ts" -export interface FullPageLayout { - head: QuartzComponent // single component - header: QuartzComponent[] // laid out horizontally - beforeBody: QuartzComponent[] // laid out vertically - pageBody: QuartzComponent // single component - left: QuartzComponent[] // vertical on desktop, horizontal on mobile - right: QuartzComponent[] // vertical on desktop, horizontal on mobile - footer: QuartzComponent // single component -} -``` - -These correspond to following parts of the page: - -![[quartz-layout.png|800]] - -> [!note] -> There are two additional layout fields that are _not_ shown in the above diagram. -> -> 1. `head` is a single component that renders the `` [tag](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/head) in the HTML. This doesn't appear visually on the page and is only is responsible for metadata about the document like the tab title, scripts, and styles. -> 2. `header` is a set of components that are laid out horizontally and appears _before_ the `beforeBody` section. This enables you to replicate the old Quartz 3 header bar where the title, search bar, and dark mode toggle. By default, Quartz 4 doesn't place any components in the `header`. - -Quartz **components**, like plugins, can take in additional properties as configuration options. If you're familiar with React terminology, you can think of them as Higher-order Components. - -See [a list of all the components](./tags/component) for all available components along with their configuration options. - -### Style - -Most meaningful style changes like colour scheme and font can be done simply through the [[#General Configuration|general configuration]] options above. - -However, if you'd like to make more involved style changes, you can do this by writing your own styles. Quartz 4, like Quartz 3, uses [Sass](https://sass-lang.com/guide/) for styling. - -You can see the base style sheet in `quartz/styles/base.scss` and write your own in `quartz/styles/custom.scss`. - -> [!note] -> Some components may provide their own styling as well! For example, `quartz/components/Darkmode.tsx` imports styles from `quartz/components/styles/darkmode.scss`. If you'd like to customize styling for a specific component, double check the component definition to see how its styles are defined. - -When you're ready, see how [[build|build and preview]] Quartz locally. diff --git a/content/features/Latex.md b/content/features/Latex.md index 91cc952e..3c8f6ff1 100644 --- a/content/features/Latex.md +++ b/content/features/Latex.md @@ -5,7 +5,7 @@ tags: Quartz uses [Katex](https://katex.org/) by default to typeset both inline and block math expressions at build time. -## Formatting +## Syntax ### Block Math diff --git a/content/features/RSS Feed.md b/content/features/RSS Feed.md index e69de29b..c519f877 100644 --- a/content/features/RSS Feed.md +++ b/content/features/RSS Feed.md @@ -0,0 +1,5 @@ +Quartz creates an RSS feed for all the content on your site by generating an `index.xml` file that RSS readers can subscribe to. Because of the RSS spec, this requires the `baseUrl` property in your [[configuration]] to be set properly for RSS readers to pick it up properly. + +## Configuration + +- Remove RSS feed: set the `enableRSS` field of `Plugin.ContentIndex` in `quartz.config.ts` to be `false`. diff --git a/content/features/SPA Routing.md b/content/features/SPA Routing.md index 91249939..3004af97 100644 --- a/content/features/SPA Routing.md +++ b/content/features/SPA Routing.md @@ -1 +1,7 @@ -Single-page-app style rendering. This prevents flashes of unstyled content and improves smoothness of Quartz +Single-page-app style rendering. This prevents flashes of unstyled content and improves the smoothness of Quartz. + +Under the hood, this is done by hijacking page navigations and instead fetching the HTML via a `GET` request and then diffing and selectively replacing parts of the page using [micromorph](https://github.com/natemoo-re/micromorph). This allows us to change the content of the page without fully refreshing the page, reducing the amount of content that the browser needs to load. + +## Configuration + +- Disable SPA Routing: set the `enableSPA` field of the [[configuration]] in `quartz.config.ts` to be `false`. diff --git a/content/features/backlinks.md b/content/features/backlinks.md index 4df7fd17..f558f4a5 100644 --- a/content/features/backlinks.md +++ b/content/features/backlinks.md @@ -8,7 +8,7 @@ A backlink for a note is a link from another note to that note. Links in the bac ## Customization -- Removing backlinks: delete all usages of `Component.Backlinks()` from `quartz.config.ts`. +- Removing backlinks: delete all usages of `Component.Backlinks()` from `quartz.layout.ts`. - Component: `quartz/components/Backlinks.tsx` - Style: `quartz/components/styles/backlinks.scss` - Script: `quartz/components/scripts/search.inline.ts` diff --git a/content/features/darkmode.md b/content/features/darkmode.md new file mode 100644 index 00000000..dfa23140 --- /dev/null +++ b/content/features/darkmode.md @@ -0,0 +1,14 @@ +--- +title: "Darkmode" +tags: + - component +--- + +Quartz supports darkmode out of the box that respects the user's theme preference. Any future manual toggles of the darkmode switch will be saved in the browser's local storage so it can be persisted across future page loads. + +## Customization + +- Removing darkmode: delete all usages of `Component.Darkmode()` from `quartz.layout.ts`. +- Component: `quartz/components/Darkmode.tsx` +- Style: `quartz/components/styles/darkmode.scss` +- Script: `quartz/components/scripts/darkmode.inline.ts` diff --git a/content/features/full-text search.md b/content/features/full-text search.md index cb0567f3..ce3d88f9 100644 --- a/content/features/full-text search.md +++ b/content/features/full-text search.md @@ -21,7 +21,7 @@ It properly tokenizes Chinese, Korean, and Japenese characters and constructs se ## Customization -- Removing search: delete all usages of `Component.Search()` from `quartz.config.ts`. +- Removing search: delete all usages of `Component.Search()` from `quartz.layout.ts`. - Component: `quartz/components/Search.tsx` - Style: `quartz/components/styles/search.scss` - Script: `quartz/components/scripts/search.inline.ts` diff --git a/content/features/graph view.md b/content/features/graph view.md index 9fb31be7..c7ddb03e 100644 --- a/content/features/graph view.md +++ b/content/features/graph view.md @@ -22,7 +22,7 @@ Most configuration can be done by passing in options to `Component.Graph()`. For example, here's what the default configuration looks like: -```typescript title="quartz.config.ts" +```typescript title="quartz.layout.ts" Component.Graph({ localGraph: { drag: true, // whether to allow panning the view around @@ -53,7 +53,7 @@ When passing in your own options, you can omit any or all of these fields if you Want to customize it even more? -- Removing graph view: delete all usages of `Component.Graph()` from `quartz.config.ts`. +- Removing graph view: delete all usages of `Component.Graph()` from `quartz.layout.ts`. - Component: `quartz/components/Graph.tsx` - Style: `quartz/components/styles/graph.scss` - Script: `quartz/components/scripts/graph.inline.ts` diff --git a/content/features/table of contents.md b/content/features/table of contents.md index 70191157..ecc36fdc 100644 --- a/content/features/table of contents.md +++ b/content/features/table of contents.md @@ -2,4 +2,23 @@ title: "Table of Contents" tags: - component + - plugins/transformer --- + +Quartz can automatically generate a table of contents from a list of headings on each page. It will also show you your current scroll position on the site by marking headings you've scrolled through with a different colour. + +By default, it will show all headers from H1 (`# Title`) all the way to H3 (`### Title`) and will only show the table of contents if there is more than 1 header on the page. + +> [!info] +> This feature requires both `Plugin.TableOfContents` in your `quartz.config.ts` and `Component.TableOfContents` in your `quartz.layout.ts` to function correctly. + +## Customization + +- Removing table of contents: remove all instances of `Plugin.TableOfContents()` from `quartz.config.ts`. and `Component.TableOfContents()` from `quartz.layout.ts` +- Changing the max depth: pass in a parameter to `Plugin.TableOfContents({ maxDepth: 4 })` +- Changing the minimum number of entries in the Table of Contents before it renders: pass in a parameter to `Plugin.TableOfContents({ minEntries: 3 })` +- Component: `quartz/components/TableOfContents.tsx` +- Style: + - Modern (default): `quartz/components/styles/toc.scss` + - Legacy Quartz 3 style: `quartz/components/styles/legacyToc.scss` +- Script: `quartz/components/scripts/toc.inline.ts` diff --git a/content/features/upcoming features.md b/content/features/upcoming features.md index ebfd6257..424f0281 100644 --- a/content/features/upcoming features.md +++ b/content/features/upcoming features.md @@ -4,6 +4,9 @@ draft: true ## todo +- wikilink to anchors in the same document +- folders, tags, and content emit overlapping (e.g. for tags/component) +- 404 using base url - nested tags showing duplicate - tag page markdown file for description not being rendered - back button with anchors / popovers + spa is broken @@ -13,12 +16,6 @@ draft: true - dereference symlink for npx quartz sync - test/fix with subpath - fix docs with deploy from github -- write feature docs - - rss - - spa-routing - - table of contents - - darkmode - - frontmatter parsing ## high priority backlog diff --git a/content/features/wikilinks.md b/content/features/wikilinks.md index e69de29b..4d197157 100644 --- a/content/features/wikilinks.md +++ b/content/features/wikilinks.md @@ -0,0 +1,18 @@ +--- +title: Wikilinks +--- + +Wikilinks were pioneered by earlier internet wikis to make it easier to write links across pages without needing to write Markdown or HTML links each time. + +Quartz supports Wikilinks by default and these links are resolved by Quartz using `Plugin.CrawlLinks`. See the [Obsidian Help page on Internal Links](https://help.obsidian.md/Linking+notes+and+files/Internal+links) for more information on Wikilink syntax. + +This is enabled as a part of [[Obsidian compatibility]] and can be configured and enabled/disabled from that plugin. + +## Syntax + +- `[[Path to file]]`: produces a link to `Path to file` with the text `Path to file` +- `[[Path to file | Here's the title override]]`: produces a link to `Path to file` with the text `Here's the title override` +- `[[Path to file#Anchor]]`: produces a link to the anchor `Anchor` in the file `Path to file` + +> [!warning] +> Currently, Quartz does not support block references or note embed syntax. diff --git a/content/hosting.md b/content/hosting.md index 5d09500c..0ed2335d 100644 --- a/content/hosting.md +++ b/content/hosting.md @@ -6,6 +6,9 @@ Quartz effectively turns your Markdown files and other resources into a bundle o However, if you'd like to publish your site to the world, you need a way to host it online. This guide will detail how to deploy with either GitHub Pages or Cloudflare pages but any service that allows you to deploy static HTML should work as well (e.g. Netlify, Replit, etc.) +> [!hint] +> Some Quartz features (like [[RSS Feed]] and sitemap generation) require `baseUrl` to be configured properly in your [[configuration]] to work properly. Make sure you set this before deploying! + ## Cloudflare Pages 1. Log in to the [Cloudflare dashboard](https://dash.cloudflare.com/) and select your account. diff --git a/content/index.md b/content/index.md index 32f012c2..cf97d31f 100644 --- a/content/index.md +++ b/content/index.md @@ -18,21 +18,29 @@ npm i npx quartz create ``` -This will guide you through initializing your Quartz with content. Once you've done so, see how to [[authoring content|author content]] or how to [[build]] and [[hosting|host]] Quartz. +This will guide you through initializing your Quartz with content. Once you've done so, see how to: + +1. [[authoring content|Author content]] in Quartz +2. [[configuration|Configure]] Quartz's behaviour +3. Change Quartz's [[layout]] +4. [[build|Build and preview]] Quartz +5. [[hosting|Host]] Quartz online > [!info] > Coming from Quartz 3? See the [[migrating from Quartz 3|migration guide]] for the differences between Quartz 3 and Quartz 4 and how to migrate. ## 🔧 Features -- [[Obsidian compatibility]], [[full-text search]], [[graph view]], [[wikilinks]], [[backlinks]], [[Latex]], [[syntax highlighting]], [[popover previews]], and many more right out of the box +- [[Obsidian compatibility]], [[full-text search]], [[graph view]], [[wikilinks]], [[backlinks]], [[Latex]], [[syntax highlighting]], [[popover previews]], and [many more](./features) right out of the box - Hot-reload for both configuration and content -- Simple JSX [[creating components|layouts and page components]] +- Simple JSX layouts and [[creating components|page components]] - [[SPA Routing|Ridiculously fast page loads]] and tiny bundle sizes - Fully-customizable parsing, filtering, and page generation through [[making plugins|plugins]] For a comprehensive list of features, visit the [features page](/features). You can read more the _why_ behind these features on the [[philosophy]] page and a technical overview on the [[architecture]] page. -### 🚧 Troubleshooting +### 🚧 Troubleshooting + Updating -Having trouble with Quartz? Try searching for your issue using the search feature. If you're still having trouble, feel free to [submit an issue](https://github.com/jackyzha0/quartz/issues) if you feel you found a bug or ask for help in our [Discord Community](https://discord.gg/cRFFHYye7t). +Having trouble with Quartz? Try searching for your issue using the search feature. If you haven't already, [[upgrading|upgrade]] to the newest version of Quartz to see if this fixes your issue. + +If you're still having trouble, feel free to [submit an issue](https://github.com/jackyzha0/quartz/issues) if you feel you found a bug or ask for help in our [Discord Community](https://discord.gg/cRFFHYye7t). diff --git a/content/layout.md b/content/layout.md new file mode 100644 index 00000000..80171007 --- /dev/null +++ b/content/layout.md @@ -0,0 +1,42 @@ +--- +title: Layout +--- + +Certain emitters may also output [HTML](https://developer.mozilla.org/en-US/docs/Web/HTML) files. To enable easy customization, these emitters allow you to fully rearrange the layout of the page. The default page layouts can be found in `quartz.layout.ts`. + +Each page is composed of multiple different sections which contain `QuartzComponents`. The following code snippet lists all of the valid sections that you can add components to: + +```typescript title="quartz/cfg.ts" +export interface FullPageLayout { + head: QuartzComponent // single component + header: QuartzComponent[] // laid out horizontally + beforeBody: QuartzComponent[] // laid out vertically + pageBody: QuartzComponent // single component + left: QuartzComponent[] // vertical on desktop, horizontal on mobile + right: QuartzComponent[] // vertical on desktop, horizontal on mobile + footer: QuartzComponent // single component +} +``` + +These correspond to following parts of the page: + +![[quartz-layout.png|800]] + +> [!note] +> There are two additional layout fields that are _not_ shown in the above diagram. +> +> 1. `head` is a single component that renders the `` [tag](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/head) in the HTML. This doesn't appear visually on the page and is only is responsible for metadata about the document like the tab title, scripts, and styles. +> 2. `header` is a set of components that are laid out horizontally and appears _before_ the `beforeBody` section. This enables you to replicate the old Quartz 3 header bar where the title, search bar, and dark mode toggle. By default, Quartz 4 doesn't place any components in the `header`. + +Quartz **components**, like plugins, can take in additional properties as configuration options. If you're familiar with React terminology, you can think of them as Higher-order Components. + +See [a list of all the components](./tags/component) for all available components along with their configuration options. You can also checkout the guide on [[creating components]] if you're interested in further customizing the behaviour of Quartz. + +### Style + +Most meaningful style changes like colour scheme and font can be done simply through the [[configuration#General Configuration|general configuration]] options. However, if you'd like to make more involved style changes, you can do this by writing your own styles. Quartz 4, like Quartz 3, uses [Sass](https://sass-lang.com/guide/) for styling. + +You can see the base style sheet in `quartz/styles/base.scss` and write your own in `quartz/styles/custom.scss`. + +> [!note] +> Some components may provide their own styling as well! For example, `quartz/components/Darkmode.tsx` imports styles from `quartz/components/styles/darkmode.scss`. If you'd like to customize styling for a specific component, double check the component definition to see how its styles are defined. diff --git a/content/philosophy.md b/content/philosophy.md index ecd856b9..ad9a14f7 100644 --- a/content/philosophy.md +++ b/content/philosophy.md @@ -6,7 +6,7 @@ title: Philosophy of Quartz > The garden is the web as topology. Every walk through the garden creates new paths, new meanings, and when we add things to the garden we add them in a way that allows many future, unpredicted relationships. > -> (The Garden and the Stream) +> _(The Garden and the Stream)_ The problem with the file cabinet is that it focuses on efficiency of access and interoperability rather than generativity and creativity. Thinking is not linear, nor is it hierarchical. In fact, not many things are linear or hierarchical at all. Then why is it that most tools and thinking strategies assume a nice chronological or hierarchical order for my thought processes? The ideal tool for thought for me would embrace the messiness of my mind, and organically help insights emerge from chaos instead of forcing an artificial order. A rhizomatic, not arboresecent, form of note taking. @@ -22,6 +22,7 @@ The goal of digital gardening should be to tap into your network’s collective Quartz is designed first and foremost as a tool for publishing [digital gardens](https://jzhao.xyz/posts/networked-thought/) to the web. To me, digital gardening is not just passive knowledge collection. It’s a form of expression and sharing. -> “[One] who works with the door open gets all kinds of interruptions, but [they] also occasionally gets clues as to what the world is and what might be important.†— Richard Hamming +> “[One] who works with the door open gets all kinds of interruptions, but [they] also occasionally gets clues as to what the world is and what might be important.†+> — Richard Hamming **The goal of Quartz is to make sharing your digital garden free and simple.** At its core, Quartz is designed to be easy to use enough for non-technical people to get going but also powerful enough that senior developers can tweak it to work how they'd like it to work. diff --git a/content/upgrading.md b/content/upgrading.md index f9f0c399..abe916c6 100644 --- a/content/upgrading.md +++ b/content/upgrading.md @@ -5,12 +5,12 @@ title: "Upgrading Quartz" > [!note] > This is specifically a guide for upgrading Quartz 4 version to a more recent update. If you are coming from Quartz 3, check out the [[migrating from Quartz 3|migration guide]] for more info. -To fetch the latest Quartz updates, simply do +To fetch the latest Quartz updates, simply run -``` +```bash npx quartz upgrade ``` -As Quartz uses [git](https://git-scm.com/) under the hood for versioning, updating effectively 'pulls' in the updates from the official Quartz GitHub repository. If you have local changes that might conflict with the updates, you may need to resolve these manually yourself. +As Quartz uses [git](https://git-scm.com/) under the hood for versioning, updating effectively 'pulls' in the updates from the official Quartz GitHub repository. If you have local changes that might conflict with the updates, you may need to resolve these manually yourself (or, pull manually using `git pull origin upstream`). If you have the [GitHub desktop app](https://desktop.github.com/), this will automatically open to help you resolve the conflicts. Otherwise, you will need to resolve this in a text editor like VSCode. For more help on resolving conflicts manually, check out the [GitHub guide on resolving merge conflicts](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/addressing-merge-conflicts/resolving-a-merge-conflict-using-the-command-line#competing-line-change-merge-conflicts). From 736c3981c4affff8dea1eb908ff760ee740ec4a3 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Fri, 11 Aug 2023 23:25:44 -0700 Subject: [PATCH 458/695] fix emit filepaths, tag emit being overriden by content --- content/features/private pages.md | 2 ++ content/features/table of contents.md | 2 +- quartz.config.ts | 2 +- quartz/components/pages/TagContent.tsx | 6 +++--- quartz/plugins/emitters/assets.ts | 2 +- quartz/plugins/emitters/static.ts | 2 +- quartz/plugins/emitters/tagPage.tsx | 4 ++-- 7 files changed, 11 insertions(+), 9 deletions(-) diff --git a/content/features/private pages.md b/content/features/private pages.md index e225e8c3..9be591b8 100644 --- a/content/features/private pages.md +++ b/content/features/private pages.md @@ -1,5 +1,7 @@ --- title: Private Pages +tags: +- plugin/filter --- There may be some notes you want to avoid publishing as a website. Quartz supports this through two mechanisms which can be used in conjunction: diff --git a/content/features/table of contents.md b/content/features/table of contents.md index ecc36fdc..f0585736 100644 --- a/content/features/table of contents.md +++ b/content/features/table of contents.md @@ -2,7 +2,7 @@ title: "Table of Contents" tags: - component - - plugins/transformer + - plugin/transformer --- Quartz can automatically generate a table of contents from a list of headings on each page. It will also show you your current scroll position on the site by marking headings you've scrolled through with a different colour. diff --git a/quartz.config.ts b/quartz.config.ts index 447039d6..dc9b7d5e 100644 --- a/quartz.config.ts +++ b/quartz.config.ts @@ -9,7 +9,7 @@ const config: QuartzConfig = { analytics: { provider: "plausible", }, - baseUrl: "quartz.jzhao.xyz", + baseUrl: "four.quartz.jzhao.xyz", ignorePatterns: ["private", "templates"], theme: { typography: { diff --git a/quartz/components/pages/TagContent.tsx b/quartz/components/pages/TagContent.tsx index 5300cce4..05aaade1 100644 --- a/quartz/components/pages/TagContent.tsx +++ b/quartz/components/pages/TagContent.tsx @@ -3,7 +3,7 @@ import { Fragment, jsx, jsxs } from "preact/jsx-runtime" import { toJsxRuntime } from "hast-util-to-jsx-runtime" import style from "../styles/listPage.scss" import { PageList } from "../PageList" -import { ServerSlug, canonicalizeServer, getAllSegmentPrefixes } from "../../path" +import { ServerSlug, canonicalizeServer, getAllSegmentPrefixes, joinSegments } from "../../path" import { QuartzPluginData } from "../../plugins/vfile" const numPages = 10 @@ -11,7 +11,7 @@ function TagContent(props: QuartzComponentProps) { const { tree, fileData, allFiles } = props const slug = fileData.slug - if (!slug?.startsWith("tags/")) { + if (!(slug?.startsWith("tags/") || slug === "tags")) { throw new Error(`Component "TagContent" tried to render a non-tag page: ${slug}`) } @@ -44,7 +44,7 @@ function TagContent(props: QuartzComponentProps) { return (

    - + #{tag}

    diff --git a/quartz/plugins/emitters/assets.ts b/quartz/plugins/emitters/assets.ts index 400c39da..0f7f3e41 100644 --- a/quartz/plugins/emitters/assets.ts +++ b/quartz/plugins/emitters/assets.ts @@ -24,7 +24,7 @@ export const Assets: QuartzEmitterPlugin = () => { const dir = path.dirname(dest) as FilePath await fs.promises.mkdir(dir, { recursive: true }) // ensure dir exists await fs.promises.copyFile(src, dest) - res.push(fp) + res.push(dest) } return res diff --git a/quartz/plugins/emitters/static.ts b/quartz/plugins/emitters/static.ts index 75bcc746..794cbac6 100644 --- a/quartz/plugins/emitters/static.ts +++ b/quartz/plugins/emitters/static.ts @@ -12,6 +12,6 @@ export const Static: QuartzEmitterPlugin = () => ({ const staticPath = joinSegments(QUARTZ, "static") const fps = await glob("**", staticPath, cfg.configuration.ignorePatterns) await fs.promises.cp(staticPath, joinSegments(argv.output, "static"), { recursive: true }) - return fps.map((fp) => joinSegments("static", fp)) as FilePath[] + return fps.map((fp) => joinSegments(argv.output, "static", fp)) as FilePath[] }, }) diff --git a/quartz/plugins/emitters/tagPage.tsx b/quartz/plugins/emitters/tagPage.tsx index 19e2906b..fd00d9c9 100644 --- a/quartz/plugins/emitters/tagPage.tsx +++ b/quartz/plugins/emitters/tagPage.tsx @@ -49,7 +49,7 @@ export const TagPage: QuartzEmitterPlugin = (userOpts) => { return [ tag, defaultProcessedContent({ - slug: joinSegments("tags", tag, "index") as ServerSlug, + slug: joinSegments("tags", tag) as ServerSlug, frontmatter: { title, tags: [] }, }), ] @@ -59,7 +59,7 @@ export const TagPage: QuartzEmitterPlugin = (userOpts) => { for (const [tree, file] of content) { const slug = file.data.slug! if (slug.startsWith("tags/")) { - const tag = joinSegments(slug.slice("tags/".length), "index") + const tag = slug.slice("tags/".length) if (tags.has(tag)) { tagDescriptions[tag] = [tree, file] } From ed62ece491310e75d336db844d8ce56d3d26be31 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Fri, 11 Aug 2023 23:27:59 -0700 Subject: [PATCH 459/695] fix broken tag listing links to tags --- content/features/private pages.md | 2 +- quartz/components/pages/TagContent.tsx | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/content/features/private pages.md b/content/features/private pages.md index 9be591b8..402e52c2 100644 --- a/content/features/private pages.md +++ b/content/features/private pages.md @@ -1,7 +1,7 @@ --- title: Private Pages tags: -- plugin/filter + - plugin/filter --- There may be some notes you want to avoid publishing as a website. Quartz supports this through two mechanisms which can be used in conjunction: diff --git a/quartz/components/pages/TagContent.tsx b/quartz/components/pages/TagContent.tsx index 05aaade1..5d30240b 100644 --- a/quartz/components/pages/TagContent.tsx +++ b/quartz/components/pages/TagContent.tsx @@ -3,7 +3,7 @@ import { Fragment, jsx, jsxs } from "preact/jsx-runtime" import { toJsxRuntime } from "hast-util-to-jsx-runtime" import style from "../styles/listPage.scss" import { PageList } from "../PageList" -import { ServerSlug, canonicalizeServer, getAllSegmentPrefixes, joinSegments } from "../../path" +import { ServerSlug, canonicalizeServer, getAllSegmentPrefixes } from "../../path" import { QuartzPluginData } from "../../plugins/vfile" const numPages = 10 @@ -44,7 +44,7 @@ function TagContent(props: QuartzComponentProps) { return (

    - + #{tag}

    From 83269ac26e41f8e81b56e000b4347ee60d4ff84b Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Fri, 11 Aug 2023 23:40:06 -0700 Subject: [PATCH 460/695] fix scanning for tags in content --- content/features/upcoming features.md | 4 +--- quartz/plugins/transformers/links.ts | 3 ++- quartz/plugins/transformers/ofm.ts | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/content/features/upcoming features.md b/content/features/upcoming features.md index 424f0281..718ae170 100644 --- a/content/features/upcoming features.md +++ b/content/features/upcoming features.md @@ -5,10 +5,8 @@ draft: true ## todo - wikilink to anchors in the same document -- folders, tags, and content emit overlapping (e.g. for tags/component) +- blockquote with link in first child broken - 404 using base url -- nested tags showing duplicate - - tag page markdown file for description not being rendered - back button with anchors / popovers + spa is broken - search should be fast for large repos - debounce cfg rebuild on large repos diff --git a/quartz/plugins/transformers/links.ts b/quartz/plugins/transformers/links.ts index 54bcce9e..5b15725a 100644 --- a/quartz/plugins/transformers/links.ts +++ b/quartz/plugins/transformers/links.ts @@ -86,7 +86,8 @@ export const CrawlLinks: QuartzTransformerPlugin | undefined> = if ( opts.prettyLinks && node.children.length === 1 && - node.children[0].type === "text" + node.children[0].type === "text" && + !node.children[0].value.startsWith("#") ) { node.children[0].value = path.basename(node.children[0].value) } diff --git a/quartz/plugins/transformers/ofm.ts b/quartz/plugins/transformers/ofm.ts index e7438aa9..a371efb6 100644 --- a/quartz/plugins/transformers/ofm.ts +++ b/quartz/plugins/transformers/ofm.ts @@ -115,7 +115,7 @@ const commentRegex = new RegExp(/%%(.+)%%/, "g") const calloutRegex = new RegExp(/^\[\!(\w+)\]([+-]?)/) // (?:^| ) -> non-capturing group, tag should start be separated by a space or be the start of the line // #(\w+) -> tag itself is # followed by a string of alpha-numeric characters -const tagRegex = new RegExp(/(?:^| )#(\w+)/, "g") +const tagRegex = new RegExp(/(?:^| )#([\w-_\/]+)/, "g") export const ObsidianFlavoredMarkdown: QuartzTransformerPlugin | undefined> = ( userOpts, From e1dd6aee863878a02f51200b3878d619220c22f3 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Fri, 11 Aug 2023 23:55:17 -0700 Subject: [PATCH 461/695] fix wikilinks to anchors in the same document --- content/features/upcoming features.md | 1 - quartz/plugins/transformers/ofm.ts | 11 ++++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/content/features/upcoming features.md b/content/features/upcoming features.md index 718ae170..728d16a3 100644 --- a/content/features/upcoming features.md +++ b/content/features/upcoming features.md @@ -4,7 +4,6 @@ draft: true ## todo -- wikilink to anchors in the same document - blockquote with link in first child broken - 404 using base url - back button with anchors / popovers + spa is broken diff --git a/quartz/plugins/transformers/ofm.ts b/quartz/plugins/transformers/ofm.ts index a371efb6..794b554c 100644 --- a/quartz/plugins/transformers/ofm.ts +++ b/quartz/plugins/transformers/ofm.ts @@ -108,7 +108,7 @@ const capitalize = (s: string): string => { // ([^\[\]\|\#]+) -> one or more non-special characters ([,],|, or #) (name) // (#[^\[\]\|\#]+)? -> # then one or more non-special characters (heading link) // (|[^\[\]\|\#]+)? -> | then one or more non-special characters (alias) -const wikilinkRegex = new RegExp(/!?\[\[([^\[\]\|\#]+)(#[^\[\]\|\#]+)?(\|[^\[\]\|\#]+)?\]\]/, "g") +const wikilinkRegex = new RegExp(/!?\[\[([^\[\]\|\#]+)?(#[^\[\]\|\#]+)?(\|[^\[\]\|\#]+)?\]\]/, "g") const highlightRegex = new RegExp(/==(.+)==/, "g") const commentRegex = new RegExp(/%%(.+)%%/, "g") // from https://github.com/escwxyz/remark-obsidian-callout/blob/main/src/index.ts @@ -161,10 +161,11 @@ export const ObsidianFlavoredMarkdown: QuartzTransformerPlugin if (opts.wikilinks) { src = src.toString() return src.replaceAll(wikilinkRegex, (value, ...capture) => { - const [fp, rawHeader, rawAlias] = capture + const [rawFp, rawHeader, rawAlias] = capture + const fp = rawFp ?? "" const anchor = rawHeader?.trim().slice(1) const displayAnchor = anchor ? `#${slugAnchor(anchor)}` : "" - const displayAlias = rawAlias ?? "" + const displayAlias = rawAlias ?? rawHeader?.replace("#", "|") ?? "" const embedDisplay = value.startsWith("!") ? "!" : "" return `${embedDisplay}[[${fp}${displayAnchor}${displayAlias}]]` }) @@ -177,8 +178,8 @@ export const ObsidianFlavoredMarkdown: QuartzTransformerPlugin plugins.push(() => { return (tree: Root, _file) => { findAndReplace(tree, wikilinkRegex, (value: string, ...capture: string[]) => { - let [fp, rawHeader, rawAlias] = capture - fp = fp.trim() + let [rawFp, rawHeader, rawAlias] = capture + const fp = rawFp?.trim() ?? "" const anchor = rawHeader?.trim() ?? "" const alias = rawAlias?.slice(1).trim() From 827dd918476e225238d8412551df2866e4f9e616 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Sat, 12 Aug 2023 00:03:11 -0700 Subject: [PATCH 462/695] format, make search async --- quartz/components/scripts/search.inline.ts | 4 ++-- quartz/plugins/transformers/ofm.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/quartz/components/scripts/search.inline.ts b/quartz/components/scripts/search.inline.ts index 40d0bc20..9fc0c0e9 100644 --- a/quartz/components/scripts/search.inline.ts +++ b/quartz/components/scripts/search.inline.ts @@ -139,9 +139,9 @@ document.addEventListener("nav", async (e: unknown) => { } } - function onType(e: HTMLElementEventMap["input"]) { + async function onType(e: HTMLElementEventMap["input"]) { const term = (e.target as HTMLInputElement).value - const searchResults = index?.search(term, numSearchResults) ?? [] + const searchResults = (await index?.searchAsync(term, numSearchResults)) ?? [] const getByField = (field: string): CanonicalSlug[] => { const results = searchResults.filter((x) => x.field === field) return results.length === 0 ? [] : ([...results[0].result] as CanonicalSlug[]) diff --git a/quartz/plugins/transformers/ofm.ts b/quartz/plugins/transformers/ofm.ts index 794b554c..6083a610 100644 --- a/quartz/plugins/transformers/ofm.ts +++ b/quartz/plugins/transformers/ofm.ts @@ -165,7 +165,7 @@ export const ObsidianFlavoredMarkdown: QuartzTransformerPlugin const fp = rawFp ?? "" const anchor = rawHeader?.trim().slice(1) const displayAnchor = anchor ? `#${slugAnchor(anchor)}` : "" - const displayAlias = rawAlias ?? rawHeader?.replace("#", "|") ?? "" + const displayAlias = rawAlias ?? rawHeader?.replace("#", "|") ?? "" const embedDisplay = value.startsWith("!") ? "!" : "" return `${embedDisplay}[[${fp}${displayAnchor}${displayAlias}]]` }) From 7bffc2183ece33e2d84909a5677dac0ae2563ddd Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Sat, 12 Aug 2023 00:24:30 -0700 Subject: [PATCH 463/695] include home page in search --- quartz/components/scripts/search.inline.ts | 32 ++++++++++++++-------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/quartz/components/scripts/search.inline.ts b/quartz/components/scripts/search.inline.ts index 9fc0c0e9..a607fe22 100644 --- a/quartz/components/scripts/search.inline.ts +++ b/quartz/components/scripts/search.inline.ts @@ -4,6 +4,7 @@ import { registerEscapeHandler, removeAllChildren } from "./util" import { CanonicalSlug, getClientSlug, resolveRelative } from "../../path" interface Item { + id: number slug: CanonicalSlug title: string content: string @@ -72,6 +73,7 @@ document.addEventListener("nav", async (e: unknown) => { const searchIcon = document.getElementById("search-icon") const searchBar = document.getElementById("search-bar") as HTMLInputElement | null const results = document.getElementById("results-container") + const idDataMap = Object.keys(data) as CanonicalSlug[] function hideSearch() { container?.classList.remove("active") @@ -107,11 +109,15 @@ document.addEventListener("nav", async (e: unknown) => { } } - const formatForDisplay = (term: string, slug: CanonicalSlug) => ({ - slug, - title: highlight(term, data[slug].title ?? ""), - content: highlight(term, data[slug].content ?? "", true), - }) + const formatForDisplay = (term: string, id: number) => { + const slug = idDataMap[id] + return { + id, + slug, + title: highlight(term, data[slug].title ?? ""), + content: highlight(term, data[slug].content ?? "", true), + } + } const resultToHTML = ({ slug, title, content }: Item) => { const button = document.createElement("button") @@ -142,13 +148,14 @@ document.addEventListener("nav", async (e: unknown) => { async function onType(e: HTMLElementEventMap["input"]) { const term = (e.target as HTMLInputElement).value const searchResults = (await index?.searchAsync(term, numSearchResults)) ?? [] - const getByField = (field: string): CanonicalSlug[] => { + console.log(searchResults) + const getByField = (field: string): number[] => { const results = searchResults.filter((x) => x.field === field) - return results.length === 0 ? [] : ([...results[0].result] as CanonicalSlug[]) + return results.length === 0 ? [] : ([...results[0].result] as number[]) } // order titles ahead of content - const allIds: Set = new Set([...getByField("title"), ...getByField("content")]) + const allIds: Set = new Set([...getByField("title"), ...getByField("content")]) const finalResults = [...allIds].map((id) => formatForDisplay(term, id)) displayResults(finalResults) } @@ -168,11 +175,11 @@ document.addEventListener("nav", async (e: unknown) => { optimize: true, encode: encoder, document: { - id: "slug", + id: "id", index: [ { field: "title", - tokenize: "forward", + tokenize: "reverse", }, { field: "content", @@ -182,12 +189,15 @@ document.addEventListener("nav", async (e: unknown) => { }, }) + let id = 0 for (const [slug, fileData] of Object.entries(data)) { - await index.addAsync(slug, { + await index.addAsync(id, { + id, slug: slug as CanonicalSlug, title: fileData.title, content: fileData.content, }) + id++ } } From c55d54f068a102d85dc16c5c0e63db413bc56145 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Sat, 12 Aug 2023 10:16:55 -0700 Subject: [PATCH 464/695] enable rich text in callout title --- quartz/plugins/transformers/ofm.ts | 86 ++++++++++++++++++------------ quartz/styles/callouts.scss | 5 ++ 2 files changed, 56 insertions(+), 35 deletions(-) diff --git a/quartz/plugins/transformers/ofm.ts b/quartz/plugins/transformers/ofm.ts index 6083a610..fc56f3f9 100644 --- a/quartz/plugins/transformers/ofm.ts +++ b/quartz/plugins/transformers/ofm.ts @@ -1,6 +1,6 @@ import { PluggableList } from "unified" import { QuartzTransformerPlugin } from "../types" -import { Root, HTML, BlockContent, DefinitionContent, Code } from "mdast" +import { Root, HTML, BlockContent, DefinitionContent, Code, Paragraph } from "mdast" import { Replace, findAndReplace as mdastFindReplace } from "mdast-util-find-and-replace" import { slug as slugAnchor } from "github-slugger" import rehypeRaw from "rehype-raw" @@ -113,6 +113,7 @@ const highlightRegex = new RegExp(/==(.+)==/, "g") const commentRegex = new RegExp(/%%(.+)%%/, "g") // from https://github.com/escwxyz/remark-obsidian-callout/blob/main/src/index.ts const calloutRegex = new RegExp(/^\[\!(\w+)\]([+-]?)/) +const calloutLineRegex = new RegExp(/^> *\[\!\w+\][+-]?.*$/, "gm") // (?:^| ) -> non-capturing group, tag should start be separated by a space or be the start of the line // #(\w+) -> tag itself is # followed by a string of alpha-numeric characters const tagRegex = new RegExp(/(?:^| )#([\w-_\/]+)/, "g") @@ -122,45 +123,53 @@ export const ObsidianFlavoredMarkdown: QuartzTransformerPlugin ) => { const opts = { ...defaultOptions, ...userOpts } + const mdastToHtml = (ast: PhrasingContent | Paragraph) => { + const hast = toHast(ast, { allowDangerousHtml: true })! + return toHtml(hast, { allowDangerousHtml: true }) + } const findAndReplace = opts.enableInHtmlEmbed ? (tree: Root, regex: RegExp, replace?: Replace | null | undefined) => { - if (replace) { - const mdastToHtml = (ast: PhrasingContent) => { - const hast = toHast(ast, { allowDangerousHtml: true })! - return toHtml(hast, { allowDangerousHtml: true }) + if (replace) { + visit(tree, "html", (node: HTML) => { + if (typeof replace === "string") { + node.value = node.value.replace(regex, replace) + } else { + node.value = node.value.replaceAll(regex, (substring: string, ...args) => { + const replaceValue = replace(substring, ...args) + if (typeof replaceValue === "string") { + return replaceValue + } else if (Array.isArray(replaceValue)) { + return replaceValue.map(mdastToHtml).join("") + } else if (typeof replaceValue === "object" && replaceValue !== null) { + return mdastToHtml(replaceValue) + } else { + return substring + } + }) } - - visit(tree, "html", (node: HTML) => { - if (typeof replace === "string") { - node.value = node.value.replace(regex, replace) - } else { - node.value = node.value.replaceAll(regex, (substring: string, ...args) => { - const replaceValue = replace(substring, ...args) - if (typeof replaceValue === "string") { - return replaceValue - } else if (Array.isArray(replaceValue)) { - return replaceValue.map(mdastToHtml).join("") - } else if (typeof replaceValue === "object" && replaceValue !== null) { - return mdastToHtml(replaceValue) - } else { - return substring - } - }) - } - }) - } - - mdastFindReplace(tree, regex, replace) + }) } + + mdastFindReplace(tree, regex, replace) + } : mdastFindReplace return { name: "ObsidianFlavoredMarkdown", textTransform(_ctx, src) { + // pre-transform blockquotes + if (opts.callouts) { + src = src.toString() + src = src.replaceAll(calloutLineRegex, (value) => { + // force newline after title of callout + return value + "\n> " + }) + } + // pre-transform wikilinks (fix anchors to things that may contain illegal syntax e.g. codeblocks, latex) if (opts.wikilinks) { src = src.toString() - return src.replaceAll(wikilinkRegex, (value, ...capture) => { + src = src.replaceAll(wikilinkRegex, (value, ...capture) => { const [rawFp, rawHeader, rawAlias] = capture const fp = rawFp ?? "" const anchor = rawHeader?.trim().slice(1) @@ -170,6 +179,7 @@ export const ObsidianFlavoredMarkdown: QuartzTransformerPlugin return `${embedDisplay}[[${fp}${displayAnchor}${displayAlias}]]` }) } + return src }, markdownPlugins() { @@ -296,14 +306,22 @@ export const ObsidianFlavoredMarkdown: QuartzTransformerPlugin ) const collapse = collapseChar === "+" || collapseChar === "-" const defaultState = collapseChar === "-" ? "collapsed" : "expanded" - const title = + const titleContent = match.input.slice(calloutDirective.length).trim() || capitalize(calloutType) + const titleNode: Paragraph = { + type: 'paragraph', + children: [ + {type: 'text', value: titleContent + " "}, + ...restChildren + ] + } + const title = mdastToHtml(titleNode) const toggleIcon = ` ` - const titleNode: HTML = { + const titleHtml: HTML = { type: "html", value: `
    `, } - const blockquoteContent: (BlockContent | DefinitionContent)[] = [titleNode] + const blockquoteContent: (BlockContent | DefinitionContent)[] = [titleHtml] if (remainingText.length > 0) { blockquoteContent.push({ type: "paragraph", @@ -323,7 +341,6 @@ export const ObsidianFlavoredMarkdown: QuartzTransformerPlugin type: "text", value: remainingText, }, - ...restChildren, ], }) } @@ -335,9 +352,8 @@ export const ObsidianFlavoredMarkdown: QuartzTransformerPlugin node.data = { hProperties: { ...(node.data?.hProperties ?? {}), - className: `callout ${collapse ? "is-collapsible" : ""} ${ - defaultState === "collapsed" ? "is-collapsed" : "" - }`, + className: `callout ${collapse ? "is-collapsible" : ""} ${defaultState === "collapsed" ? "is-collapsed" : "" + }`, "data-callout": calloutType, "data-callout-fold": collapse, }, diff --git a/quartz/styles/callouts.scss b/quartz/styles/callouts.scss index f26f2cce..149321c8 100644 --- a/quartz/styles/callouts.scss +++ b/quartz/styles/callouts.scss @@ -92,6 +92,11 @@ opacity: 0.8; cursor: pointer; } + + & > .callout-title-inner > p { + color: var(--color); + margin: 0; + } } .callout-icon { From aed3f5fccbe6a70186b339af4716980a5950b989 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Sat, 12 Aug 2023 10:17:07 -0700 Subject: [PATCH 465/695] fmt --- quartz/plugins/transformers/ofm.ts | 56 ++++++++++++++---------------- 1 file changed, 27 insertions(+), 29 deletions(-) diff --git a/quartz/plugins/transformers/ofm.ts b/quartz/plugins/transformers/ofm.ts index fc56f3f9..ba3fb9e5 100644 --- a/quartz/plugins/transformers/ofm.ts +++ b/quartz/plugins/transformers/ofm.ts @@ -129,29 +129,29 @@ export const ObsidianFlavoredMarkdown: QuartzTransformerPlugin } const findAndReplace = opts.enableInHtmlEmbed ? (tree: Root, regex: RegExp, replace?: Replace | null | undefined) => { - if (replace) { - visit(tree, "html", (node: HTML) => { - if (typeof replace === "string") { - node.value = node.value.replace(regex, replace) - } else { - node.value = node.value.replaceAll(regex, (substring: string, ...args) => { - const replaceValue = replace(substring, ...args) - if (typeof replaceValue === "string") { - return replaceValue - } else if (Array.isArray(replaceValue)) { - return replaceValue.map(mdastToHtml).join("") - } else if (typeof replaceValue === "object" && replaceValue !== null) { - return mdastToHtml(replaceValue) - } else { - return substring - } - }) - } - }) - } + if (replace) { + visit(tree, "html", (node: HTML) => { + if (typeof replace === "string") { + node.value = node.value.replace(regex, replace) + } else { + node.value = node.value.replaceAll(regex, (substring: string, ...args) => { + const replaceValue = replace(substring, ...args) + if (typeof replaceValue === "string") { + return replaceValue + } else if (Array.isArray(replaceValue)) { + return replaceValue.map(mdastToHtml).join("") + } else if (typeof replaceValue === "object" && replaceValue !== null) { + return mdastToHtml(replaceValue) + } else { + return substring + } + }) + } + }) + } - mdastFindReplace(tree, regex, replace) - } + mdastFindReplace(tree, regex, replace) + } : mdastFindReplace return { @@ -309,11 +309,8 @@ export const ObsidianFlavoredMarkdown: QuartzTransformerPlugin const titleContent = match.input.slice(calloutDirective.length).trim() || capitalize(calloutType) const titleNode: Paragraph = { - type: 'paragraph', - children: [ - {type: 'text', value: titleContent + " "}, - ...restChildren - ] + type: "paragraph", + children: [{ type: "text", value: titleContent + " " }, ...restChildren], } const title = mdastToHtml(titleNode) @@ -352,8 +349,9 @@ export const ObsidianFlavoredMarkdown: QuartzTransformerPlugin node.data = { hProperties: { ...(node.data?.hProperties ?? {}), - className: `callout ${collapse ? "is-collapsible" : ""} ${defaultState === "collapsed" ? "is-collapsed" : "" - }`, + className: `callout ${collapse ? "is-collapsible" : ""} ${ + defaultState === "collapsed" ? "is-collapsed" : "" + }`, "data-callout": calloutType, "data-callout-fold": collapse, }, From 8fd496bbef4bc62315f3a0893177da730d8c4262 Mon Sep 17 00:00:00 2001 From: Sohaib <98542228+sohaibology@users.noreply.github.com> Date: Sat, 12 Aug 2023 16:52:16 -0400 Subject: [PATCH 466/695] Update hosting.md (#368) --- content/hosting.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/hosting.md b/content/hosting.md index 0ed2335d..0b45764a 100644 --- a/content/hosting.md +++ b/content/hosting.md @@ -56,7 +56,7 @@ jobs: - uses: actions/checkout@v2 with: fetch-depth: 0 # Fetch all history for git info - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v3 with: node-version: 18.14 - name: Install Dependencies From c89f8b1a9a20becd982ed0b4bc88b1685a15832d Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Sat, 12 Aug 2023 10:33:57 -0700 Subject: [PATCH 467/695] fix nested callout folding --- content/features/upcoming features.md | 1 - quartz/components/scripts/callout.inline.ts | 16 ++++++++++++++++ quartz/styles/callouts.scss | 1 + 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/content/features/upcoming features.md b/content/features/upcoming features.md index 728d16a3..d2a7617d 100644 --- a/content/features/upcoming features.md +++ b/content/features/upcoming features.md @@ -4,7 +4,6 @@ draft: true ## todo -- blockquote with link in first child broken - 404 using base url - back button with anchors / popovers + spa is broken - search should be fast for large repos diff --git a/quartz/components/scripts/callout.inline.ts b/quartz/components/scripts/callout.inline.ts index 556ef3cd..d8cf5180 100644 --- a/quartz/components/scripts/callout.inline.ts +++ b/quartz/components/scripts/callout.inline.ts @@ -4,6 +4,22 @@ function toggleCallout(this: HTMLElement) { const collapsed = outerBlock.classList.contains(`is-collapsed`) const height = collapsed ? this.scrollHeight : outerBlock.scrollHeight outerBlock.style.maxHeight = height + `px` + + // walk and adjust height of all parents + let current = outerBlock + let parent = outerBlock.parentElement + while (parent) { + if (!parent.classList.contains(`callout`)) { + return + } + + const collapsed = parent.classList.contains(`is-collapsed`) + const height = collapsed ? parent.scrollHeight : parent.scrollHeight + current.scrollHeight + parent.style.maxHeight = height + `px` + + current = parent + parent = parent.parentElement + } } function setupCallout() { diff --git a/quartz/styles/callouts.scss b/quartz/styles/callouts.scss index 149321c8..ad991658 100644 --- a/quartz/styles/callouts.scss +++ b/quartz/styles/callouts.scss @@ -7,6 +7,7 @@ padding: 0 1rem; overflow-y: hidden; transition: max-height 0.3s ease; + box-sizing: border-box; & > *:nth-child(2) { margin-top: 0; From 6d9ffd6da508743407b3b88a89ed831b53321d59 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Sat, 12 Aug 2023 17:44:35 -0700 Subject: [PATCH 468/695] 404 page styling on local --- content/features/upcoming features.md | 3 +-- quartz/styles/base.scss | 3 ++- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/content/features/upcoming features.md b/content/features/upcoming features.md index d2a7617d..28cb59db 100644 --- a/content/features/upcoming features.md +++ b/content/features/upcoming features.md @@ -4,9 +4,8 @@ draft: true ## todo -- 404 using base url +- relative links broken - back button with anchors / popovers + spa is broken -- search should be fast for large repos - debounce cfg rebuild on large repos - investigate content rebuild triggering multiple times even when debounced, causing an esbuild deadlock - dereference symlink for npx quartz sync diff --git a/quartz/styles/base.scss b/quartz/styles/base.scss index 3fbbf87e..fc23b3a0 100644 --- a/quartz/styles/base.scss +++ b/quartz/styles/base.scss @@ -11,12 +11,13 @@ html { width: 100vw; } -body { +body, section { margin: 0; max-width: 100%; box-sizing: border-box; background-color: var(--light); font-family: var(--bodyFont); + color: var(--darkgray); } .text-highlight { From d6e73f221c3e52ce6591cbd01621530e5f6fd703 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Sat, 12 Aug 2023 21:16:34 -0700 Subject: [PATCH 469/695] fix relative path resolution logic, add more path tests --- quartz/path.test.ts | 105 ++++++++++++++++++++++++++- quartz/path.ts | 40 +++++++++- quartz/plugins/transformers/links.ts | 40 +++------- quartz/styles/base.scss | 3 +- 4 files changed, 152 insertions(+), 36 deletions(-) diff --git a/quartz/path.test.ts b/quartz/path.test.ts index 480493ef..d86bca5f 100644 --- a/quartz/path.test.ts +++ b/quartz/path.test.ts @@ -1,6 +1,7 @@ import test, { describe } from "node:test" import * as path from "./path" import assert from "node:assert" +import { CanonicalSlug, ServerSlug, TransformOptions } from "./path" describe("typeguards", () => { test("isClientSlug", () => { @@ -137,7 +138,7 @@ describe("transforms", () => { ) }) - describe("slugifyFilePath", () => { + test("slugifyFilePath", () => { asserts( [ ["content/index.md", "content/index"], @@ -154,7 +155,7 @@ describe("transforms", () => { ) }) - describe("transformInternalLink", () => { + test("transformInternalLink", () => { asserts( [ ["", "."], @@ -178,7 +179,7 @@ describe("transforms", () => { ) }) - describe("pathToRoot", () => { + test("pathToRoot", () => { asserts( [ ["", "."], @@ -191,3 +192,101 @@ describe("transforms", () => { ) }) }) + +describe("link strategies", () => { + const allSlugs = ["a/b/c", "a/b/d", "a/b/index", "e/f", "e/g/h", "index"] as ServerSlug[] + + describe("absolute", () => { + const opts: TransformOptions = { + strategy: "absolute", + allSlugs, + } + + test("from a/b/c", () => { + const cur = "a/b/c" as CanonicalSlug + assert.strictEqual(path.transformLink(cur, "a/b/d", opts), "../../../a/b/d") + assert.strictEqual(path.transformLink(cur, "a/b/index", opts), "../../../a/b") + assert.strictEqual(path.transformLink(cur, "e/f", opts), "../../../e/f") + assert.strictEqual(path.transformLink(cur, "e/g/h", opts), "../../../e/g/h") + assert.strictEqual(path.transformLink(cur, "index", opts), "../../..") + assert.strictEqual(path.transformLink(cur, "index#abc", opts), "../../../#abc") + assert.strictEqual(path.transformLink(cur, "tag/test", opts), "../../../tag/test") + assert.strictEqual(path.transformLink(cur, "a/b/c#test", opts), "../../../a/b/c#test") + }) + + test("from a/b/index", () => { + const cur = "a/b" as CanonicalSlug + assert.strictEqual(path.transformLink(cur, "a/b/d", opts), "../../a/b/d") + assert.strictEqual(path.transformLink(cur, "a/b", opts), "../../a/b") + assert.strictEqual(path.transformLink(cur, "index", opts), "../..") + }) + + test("from index", () => { + const cur = "" as CanonicalSlug + assert.strictEqual(path.transformLink(cur, "index", opts), ".") + assert.strictEqual(path.transformLink(cur, "a/b/c", opts), "./a/b/c") + assert.strictEqual(path.transformLink(cur, "a/b/index", opts), "./a/b") + }) + }) + + describe("shortest", () => { + const opts: TransformOptions = { + strategy: "shortest", + allSlugs, + } + + test("from a/b/c", () => { + const cur = "a/b/c" as CanonicalSlug + assert.strictEqual(path.transformLink(cur, "d", opts), "../../../a/b/d") + assert.strictEqual(path.transformLink(cur, "h", opts), "../../../e/g/h") + assert.strictEqual(path.transformLink(cur, "a/b/index", opts), "../../../a/b") + assert.strictEqual(path.transformLink(cur, "index", opts), "../../..") + }) + + test("from a/b/index", () => { + const cur = "a/b" as CanonicalSlug + assert.strictEqual(path.transformLink(cur, "d", opts), "../../a/b/d") + assert.strictEqual(path.transformLink(cur, "h", opts), "../../e/g/h") + assert.strictEqual(path.transformLink(cur, "a/b/index", opts), "../../a/b") + assert.strictEqual(path.transformLink(cur, "index", opts), "../..") + }) + + test("from index", () => { + const cur = "" as CanonicalSlug + assert.strictEqual(path.transformLink(cur, "d", opts), "./a/b/d") + assert.strictEqual(path.transformLink(cur, "h", opts), "./e/g/h") + assert.strictEqual(path.transformLink(cur, "a/b/index", opts), "./a/b") + assert.strictEqual(path.transformLink(cur, "index", opts), ".") + }) + }) + + describe("relative", () => { + const opts: TransformOptions = { + strategy: "relative", + allSlugs, + } + + test("from a/b/c", () => { + const cur = "a/b/c" as CanonicalSlug + assert.strictEqual(path.transformLink(cur, "d", opts), "./d") + assert.strictEqual(path.transformLink(cur, "index", opts), ".") + assert.strictEqual(path.transformLink(cur, "../../index", opts), "../..") + assert.strictEqual(path.transformLink(cur, "../../", opts), "../..") + assert.strictEqual(path.transformLink(cur, "../../e/g/h", opts), "../../e/g/h") + }) + + test("from a/b/index", () => { + const cur = "a/b" as CanonicalSlug + assert.strictEqual(path.transformLink(cur, "../../index", opts), "../..") + assert.strictEqual(path.transformLink(cur, "../../", opts), "../..") + assert.strictEqual(path.transformLink(cur, "../../e/g/h", opts), "../../e/g/h") + assert.strictEqual(path.transformLink(cur, "c", opts), "./c") + }) + + test("from index", () => { + const cur = "" as CanonicalSlug + assert.strictEqual(path.transformLink(cur, "e/g/h", opts), "./e/g/h") + assert.strictEqual(path.transformLink(cur, "a/b/index", opts), "./a/b") + }) + }) +}) diff --git a/quartz/path.ts b/quartz/path.ts index e410771a..e5bd0d6d 100644 --- a/quartz/path.ts +++ b/quartz/path.ts @@ -42,6 +42,8 @@ import { slug } from "github-slugger" // └────────────┤ MD File ├─────┴─────────────────┘ // └─────────┘ +export const QUARTZ = "quartz" + /// Utility type to simulate nominal types in TypeScript type SlugLike = string & { __brand: T } @@ -194,7 +196,43 @@ export function getAllSegmentPrefixes(tags: string): string[] { return results } -export const QUARTZ = "quartz" +export interface TransformOptions { + strategy: "absolute" | "relative" | "shortest" + allSlugs: ServerSlug[] +} + +export function transformLink( + src: CanonicalSlug, + target: string, + opts: TransformOptions, +): RelativeURL { + let targetSlug: string = transformInternalLink(target) + + if (opts.strategy === "relative") { + return _addRelativeToStart(targetSlug) as RelativeURL + } else { + targetSlug = _stripSlashes(targetSlug.slice(".".length)) + let [targetCanonical, targetAnchor] = splitAnchor(targetSlug) + + if (opts.strategy === "shortest") { + // if the file name is unique, then it's just the filename + const matchingFileNames = opts.allSlugs.filter((slug) => { + const parts = slug.split("/") + const fileName = parts.at(-1) + return targetCanonical === fileName + }) + + // only match, just use it + if (matchingFileNames.length === 1) { + const targetSlug = canonicalizeServer(matchingFileNames[0]) + return (resolveRelative(src, targetSlug) + targetAnchor) as RelativeURL + } + } + + // if it's not unique, then it's the absolute path from the vault root + return joinSegments(pathToRoot(src), targetSlug) as RelativeURL + } +} function _canonicalize(fp: string): string { fp = _trimSuffix(fp, "index") diff --git a/quartz/plugins/transformers/links.ts b/quartz/plugins/transformers/links.ts index 5b15725a..10b527c9 100644 --- a/quartz/plugins/transformers/links.ts +++ b/quartz/plugins/transformers/links.ts @@ -2,13 +2,12 @@ import { QuartzTransformerPlugin } from "../types" import { CanonicalSlug, RelativeURL, + TransformOptions, _stripSlashes, canonicalizeServer, joinSegments, - pathToRoot, - resolveRelative, splitAnchor, - transformInternalLink, + transformLink, } from "../../path" import path from "path" import { visit } from "unist-util-visit" @@ -16,7 +15,7 @@ import isAbsoluteUrl from "is-absolute-url" interface Options { /** How to resolve Markdown paths */ - markdownLinkResolution: "absolute" | "relative" | "shortest" + markdownLinkResolution: TransformOptions["strategy"] /** Strips folders from a link so that it looks nice */ prettyLinks: boolean } @@ -35,34 +34,13 @@ export const CrawlLinks: QuartzTransformerPlugin | undefined> = () => { return (tree, file) => { const curSlug = canonicalizeServer(file.data.slug!) - const transformLink = (target: string): RelativeURL => { - const targetSlug = _stripSlashes(transformInternalLink(target).slice(".".length)) - let [targetCanonical, targetAnchor] = splitAnchor(targetSlug) - if (opts.markdownLinkResolution === "relative") { - return targetSlug as RelativeURL - } else if (opts.markdownLinkResolution === "shortest") { - // if the file name is unique, then it's just the filename - const matchingFileNames = ctx.allSlugs.filter((slug) => { - const parts = slug.split(path.posix.sep) - const fileName = parts.at(-1) - return targetCanonical === fileName - }) + const outgoing: Set = new Set() - // only match, just use it - if (matchingFileNames.length === 1) { - const targetSlug = canonicalizeServer(matchingFileNames[0]) - return (resolveRelative(curSlug, targetSlug) + targetAnchor) as RelativeURL - } - - // if it's not unique, then it's the absolute path from the vault root - // (fall-through case) - } - - // treat as absolute - return joinSegments(pathToRoot(curSlug), targetSlug) as RelativeURL + const transformOptions: TransformOptions = { + strategy: opts.markdownLinkResolution, + allSlugs: ctx.allSlugs, } - const outgoing: Set = new Set() visit(tree, "element", (node, _index, _parent) => { // rewrite all links if ( @@ -76,7 +54,7 @@ export const CrawlLinks: QuartzTransformerPlugin | undefined> = // don't process external links or intra-document anchors if (!(isAbsoluteUrl(dest) || dest.startsWith("#"))) { - dest = node.properties.href = transformLink(dest) + dest = node.properties.href = transformLink(curSlug, dest, transformOptions) const canonicalDest = path.posix.normalize(joinSegments(curSlug, dest)) const [destCanonical, _destAnchor] = splitAnchor(canonicalDest) outgoing.add(destCanonical as CanonicalSlug) @@ -102,7 +80,7 @@ export const CrawlLinks: QuartzTransformerPlugin | undefined> = if (!isAbsoluteUrl(node.properties.src)) { let dest = node.properties.src as RelativeURL const ext = path.extname(node.properties.src) - dest = node.properties.src = transformLink(dest) + dest = node.properties.src = transformLink(curSlug, dest, transformOptions) node.properties.src = dest + ext } } diff --git a/quartz/styles/base.scss b/quartz/styles/base.scss index fc23b3a0..b5e6b273 100644 --- a/quartz/styles/base.scss +++ b/quartz/styles/base.scss @@ -11,7 +11,8 @@ html { width: 100vw; } -body, section { +body, +section { margin: 0; max-width: 100%; box-sizing: border-box; From 4f4b04eeb4f41067e4759bec5c2f5db181150520 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Sat, 12 Aug 2023 21:18:51 -0700 Subject: [PATCH 470/695] format docs --- content/features/upcoming features.md | 1 - content/hosting.md | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/content/features/upcoming features.md b/content/features/upcoming features.md index 28cb59db..6c64f18b 100644 --- a/content/features/upcoming features.md +++ b/content/features/upcoming features.md @@ -4,7 +4,6 @@ draft: true ## todo -- relative links broken - back button with anchors / popovers + spa is broken - debounce cfg rebuild on large repos - investigate content rebuild triggering multiple times even when debounced, causing an esbuild deadlock diff --git a/content/hosting.md b/content/hosting.md index 0b45764a..c4cc61cf 100644 --- a/content/hosting.md +++ b/content/hosting.md @@ -55,7 +55,7 @@ jobs: steps: - uses: actions/checkout@v2 with: - fetch-depth: 0 # Fetch all history for git info + fetch-depth: 0 # Fetch all history for git info - uses: actions/setup-node@v3 with: node-version: 18.14 From f1c9ca495e450ecb62dade70c4b60d86e106f79c Mon Sep 17 00:00:00 2001 From: vintro <77507980+vintrocode@users.noreply.github.com> Date: Sun, 13 Aug 2023 20:19:50 -0400 Subject: [PATCH 471/695] docs: note about existing content at same path on different branches --- content/index.md | 2 +- content/migrating from Quartz 3.md | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/content/index.md b/content/index.md index cf97d31f..45681516 100644 --- a/content/index.md +++ b/content/index.md @@ -37,7 +37,7 @@ This will guide you through initializing your Quartz with content. Once you've d - [[SPA Routing|Ridiculously fast page loads]] and tiny bundle sizes - Fully-customizable parsing, filtering, and page generation through [[making plugins|plugins]] -For a comprehensive list of features, visit the [features page](/features). You can read more the _why_ behind these features on the [[philosophy]] page and a technical overview on the [[architecture]] page. +For a comprehensive list of features, visit the [features page](/features). You can read more about the _why_ behind these features on the [[philosophy]] page and a technical overview on the [[architecture]] page. ### 🚧 Troubleshooting + Updating diff --git a/content/migrating from Quartz 3.md b/content/migrating from Quartz 3.md index d3feb3fb..f322e86f 100644 --- a/content/migrating from Quartz 3.md +++ b/content/migrating from Quartz 3.md @@ -13,6 +13,9 @@ npx quartz create When running `npx quartz create`, you will be prompted as to how to initialize your content folder. Here, you can choose to import or link your previous content folder and Quartz should work just as you expect it to. +> [!note] +> If the existing content folder you'd like to use is at the _same_ path on a different branch, clone the repo again somewhere at a _different_ path in order to use it. + ## Key changes 1. **Removing Hugo and `hugo-obsidian`**: Hugo worked well for earlier versions of Quartz but it also made it hard for people outside of the Golang and Hugo communities to fully understand what Quartz was doing under the hood and be able to properly customize it to their needs. Quartz 4 now uses a Node-based static-site generation process which should lead to a much more helpful error messages and an overall smoother user experience. From 7bde99b4e2d49e30dad1e0d58ccc34c2e7482005 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Sun, 13 Aug 2023 17:47:07 -0700 Subject: [PATCH 472/695] fix: add trailing slash to local serving --- quartz/bootstrap-cli.mjs | 1 + quartz/path.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/quartz/bootstrap-cli.mjs b/quartz/bootstrap-cli.mjs index d00a2423..0730f907 100755 --- a/quartz/bootstrap-cli.mjs +++ b/quartz/bootstrap-cli.mjs @@ -387,6 +387,7 @@ See the [documentation](https://quartz.jzhao.xyz) for how to get started. await serveHandler(req, res, { public: argv.output, directoryListing: false, + trailingSlash: true, }) const status = res.statusCode const statusString = diff --git a/quartz/path.ts b/quartz/path.ts index e5bd0d6d..8588c21f 100644 --- a/quartz/path.ts +++ b/quartz/path.ts @@ -1,4 +1,5 @@ import { slug } from "github-slugger" +// this file must be isomorphic so it can't use node libs (e.g. path) // Quartz Paths // Things in boxes are not actual types but rather sources which these types can be acquired from From 232652149a287054df7e7c5136dafd3f55a79bf0 Mon Sep 17 00:00:00 2001 From: Sohaib <98542228+sohaibology@users.noreply.github.com> Date: Mon, 14 Aug 2023 20:59:47 -0400 Subject: [PATCH 473/695] Update hosting.md (#371) --- content/hosting.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/hosting.md b/content/hosting.md index c4cc61cf..5cab7601 100644 --- a/content/hosting.md +++ b/content/hosting.md @@ -30,9 +30,9 @@ To add a custom domain, check out [Cloudflare's documentation](https://developer Like Quartz 3, you can deploy the site generated by Quartz 4 via GitHub Pages. -In your local Quartz, create a new file `quartz/.github/workflows/deploy.yaml`. +In your local Quartz, create a new file `quartz/.github/workflows/deploy.yml`. -```yaml title="quartz/.github/workflows/deploy.yaml" +```yaml title="quartz/.github/workflows/deploy.yml" name: Deploy Quartz site to GitHub Pages on: From 2f6747b1666316e579c6e7238092ac6a65d00925 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Wed, 16 Aug 2023 22:04:15 -0700 Subject: [PATCH 474/695] fix relative path resolution in router and link crawling --- content/features/upcoming features.md | 2 - content/hosting.md | 5 +- package-lock.json | 10 --- package.json | 3 +- quartz/bootstrap-cli.mjs | 74 +++++++++++++++---- quartz/build.ts | 12 +-- quartz/components/Backlinks.tsx | 2 +- quartz/components/Head.tsx | 4 +- quartz/components/PageList.tsx | 2 +- quartz/components/PageTitle.tsx | 2 +- quartz/components/TagList.tsx | 2 +- quartz/components/pages/FolderContent.tsx | 2 +- quartz/components/pages/TagContent.tsx | 2 +- quartz/components/renderPage.tsx | 4 +- quartz/components/scripts/graph.inline.ts | 2 +- quartz/components/scripts/search.inline.ts | 2 +- quartz/components/scripts/spa.inline.ts | 2 +- quartz/plugins/emitters/aliases.ts | 2 +- quartz/plugins/emitters/assets.ts | 4 +- quartz/plugins/emitters/componentResources.ts | 8 +- quartz/plugins/emitters/contentIndex.ts | 8 +- quartz/plugins/emitters/contentPage.tsx | 2 +- quartz/plugins/emitters/folderPage.tsx | 8 +- quartz/plugins/emitters/static.ts | 4 +- quartz/plugins/emitters/tagPage.tsx | 4 +- quartz/plugins/index.ts | 6 +- quartz/plugins/transformers/frontmatter.ts | 2 +- quartz/plugins/transformers/links.ts | 2 +- quartz/plugins/transformers/ofm.ts | 6 +- quartz/plugins/types.ts | 6 +- quartz/processors/emit.ts | 10 +-- quartz/processors/filter.ts | 4 +- quartz/processors/parse.ts | 10 +-- quartz/{ => util}/ctx.ts | 2 +- quartz/{ => util}/glob.ts | 0 quartz/{ => util}/log.ts | 0 quartz/{ => util}/path.test.ts | 27 ++++--- quartz/{ => util}/path.ts | 17 +++-- quartz/{ => util}/perf.ts | 0 quartz/{ => util}/resources.tsx | 0 quartz/{ => util}/sourcemap.ts | 0 quartz/{ => util}/theme.ts | 0 quartz/{ => util}/trace.ts | 0 quartz/worker.ts | 2 +- 44 files changed, 160 insertions(+), 106 deletions(-) rename quartz/{ => util}/ctx.ts (87%) rename quartz/{ => util}/glob.ts (100%) rename quartz/{ => util}/log.ts (100%) rename quartz/{ => util}/path.test.ts (96%) rename quartz/{ => util}/path.ts (96%) rename quartz/{ => util}/perf.ts (100%) rename quartz/{ => util}/resources.tsx (100%) rename quartz/{ => util}/sourcemap.ts (100%) rename quartz/{ => util}/theme.ts (100%) rename quartz/{ => util}/trace.ts (100%) diff --git a/content/features/upcoming features.md b/content/features/upcoming features.md index 6c64f18b..8d6c657b 100644 --- a/content/features/upcoming features.md +++ b/content/features/upcoming features.md @@ -8,8 +8,6 @@ draft: true - debounce cfg rebuild on large repos - investigate content rebuild triggering multiple times even when debounced, causing an esbuild deadlock - dereference symlink for npx quartz sync -- test/fix with subpath -- fix docs with deploy from github ## high priority backlog diff --git a/content/hosting.md b/content/hosting.md index 5cab7601..11dff182 100644 --- a/content/hosting.md +++ b/content/hosting.md @@ -80,7 +80,10 @@ jobs: uses: actions/deploy-pages@v2 ``` -Then, commit these changes by doing `npx quartz sync`. This should deploy your site to `.github.io/`. +Then: + +1. Head to "Settings" tab of your forked repository and in the sidebar, click "Pages". Under "Source", select "GitHub Actions". +2. Commit these changes by doing `npx quartz sync`. This should deploy your site to `.github.io/`. ### Custom Domain diff --git a/package-lock.json b/package-lock.json index f8eb5a42..4245d618 100644 --- a/package-lock.json +++ b/package-lock.json @@ -72,7 +72,6 @@ "@types/js-yaml": "^4.0.5", "@types/node": "^20.1.2", "@types/pretty-time": "^1.1.2", - "@types/serve-handler": "^6.1.1", "@types/source-map-support": "^0.5.6", "@types/workerpool": "^6.4.0", "@types/ws": "^8.5.5", @@ -1478,15 +1477,6 @@ "integrity": "sha512-4i+Y+O5H80Rh01lY/3Z0hB/UWc4R64ReE83joEpVsIG3iQWpYx66k6pQh1amJNZquKtJQyu/RcfkTtvL0KwssA==", "dev": true }, - "node_modules/@types/serve-handler": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@types/serve-handler/-/serve-handler-6.1.1.tgz", - "integrity": "sha512-bIwSmD+OV8w0t2e7EWsuQYlGoS1o5aEdVktgkXaa43Zm0qVWi21xaSRb3DQA1UXD+DJ5bRq1Rgu14ZczB+CjIQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/source-map-support": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/@types/source-map-support/-/source-map-support-0.5.6.tgz", diff --git a/package.json b/package.json index 29b46f20..17e46b06 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "scripts": { "check": "tsc --noEmit && npx prettier . --check", "format": "npx prettier . --write", - "test": "tsx ./quartz/path.test.ts", + "test": "tsx ./quartz/util/path.test.ts", "profile": "0x -D prof ./quartz/bootstrap-cli.mjs build --concurrency=1" }, "keywords": [ @@ -89,7 +89,6 @@ "@types/js-yaml": "^4.0.5", "@types/node": "^20.1.2", "@types/pretty-time": "^1.1.2", - "@types/serve-handler": "^6.1.1", "@types/source-map-support": "^0.5.6", "@types/workerpool": "^6.4.0", "@types/ws": "^8.5.5", diff --git a/quartz/bootstrap-cli.mjs b/quartz/bootstrap-cli.mjs index 0730f907..077e31b1 100755 --- a/quartz/bootstrap-cli.mjs +++ b/quartz/bootstrap-cli.mjs @@ -74,6 +74,10 @@ const BuildArgv = { default: false, describe: "run a local server to live-preview your Quartz", }, + baseDir: { + string: true, + describe: "base path to serve your local server on", + }, port: { number: true, default: 8080, @@ -384,19 +388,63 @@ See the [documentation](https://quartz.jzhao.xyz) for how to get started. await build(clientRefresh) const server = http.createServer(async (req, res) => { - await serveHandler(req, res, { - public: argv.output, - directoryListing: false, - trailingSlash: true, - }) - const status = res.statusCode - const statusString = - status >= 200 && status < 300 - ? chalk.green(`[${status}]`) - : status >= 300 && status < 400 - ? chalk.yellow(`[${status}]`) - : chalk.red(`[${status}]`) - console.log(statusString + chalk.grey(` ${req.url}`)) + const serve = async (fp) => { + await serveHandler(req, res, { + public: argv.output, + directoryListing: false, + }) + const status = res.statusCode + const statusString = + status >= 200 && status < 300 ? chalk.green(`[${status}]`) : chalk.red(`[${status}]`) + console.log(statusString + chalk.grey(` ${req.url}`)) + } + + const redirect = (newFp) => { + res.writeHead(301, { + Location: newFp, + }) + console.log(chalk.yellow("[301]") + chalk.grey(` ${req.url} -> ${newFp}`)) + return res.end() + } + + let fp = req.url?.split("?")[0] ?? "/" + + // handle redirects + if (fp.endsWith("/")) { + // /trailing/ + // does /trailing/index.html exist? if so, serve it + const indexFp = path.posix.join(fp, "index.html") + if (fs.existsSync(path.posix.join(argv.output, indexFp))) { + return serve(indexFp) + } + + // does /trailing.html exist? if so, redirect to /trailing + let base = fp.slice(0, -1) + if (path.extname(base) === "") { + base += ".html" + } + if (fs.existsSync(path.posix.join(argv.output, base))) { + return redirect(base) + } + } else { + // /regular + // does /regular.html exist? if so, serve it + let base = fp + if (path.extname(base) === "") { + base += ".html" + } + if (fs.existsSync(path.posix.join(argv.output, base))) { + return serve(base) + } + + // does /regular/index.html exist? if so, redirect to /regular/ + let indexFp = path.posix.join(fp, "index.html") + if (fs.existsSync(path.posix.join(argv.output, indexFp))) { + return redirect(fp + "/") + } + } + + return serve(fp) }) server.listen(argv.port) console.log(chalk.cyan(`Started a Quartz server listening at http://localhost:${argv.port}`)) diff --git a/quartz/build.ts b/quartz/build.ts index c25efbf4..779ab35e 100644 --- a/quartz/build.ts +++ b/quartz/build.ts @@ -1,7 +1,7 @@ import sourceMapSupport from "source-map-support" sourceMapSupport.install(options) import path from "path" -import { PerfTimer } from "./perf" +import { PerfTimer } from "./util/perf" import { rimraf } from "rimraf" import { isGitIgnored } from "globby" import chalk from "chalk" @@ -9,13 +9,13 @@ import { parseMarkdown } from "./processors/parse" import { filterContent } from "./processors/filter" import { emitContent } from "./processors/emit" import cfg from "../quartz.config" -import { FilePath, joinSegments, slugifyFilePath } from "./path" +import { FilePath, joinSegments, slugifyFilePath } from "./util/path" import chokidar from "chokidar" import { ProcessedContent } from "./plugins/vfile" -import { Argv, BuildCtx } from "./ctx" -import { glob, toPosixPath } from "./glob" -import { trace } from "./trace" -import { options } from "./sourcemap" +import { Argv, BuildCtx } from "./util/ctx" +import { glob, toPosixPath } from "./util/glob" +import { trace } from "./util/trace" +import { options } from "./util/sourcemap" async function buildQuartz(argv: Argv, clientRefresh: () => void) { const ctx: BuildCtx = { diff --git a/quartz/components/Backlinks.tsx b/quartz/components/Backlinks.tsx index 575e6133..8cf3afa2 100644 --- a/quartz/components/Backlinks.tsx +++ b/quartz/components/Backlinks.tsx @@ -1,6 +1,6 @@ import { QuartzComponentConstructor, QuartzComponentProps } from "./types" import style from "./styles/backlinks.scss" -import { canonicalizeServer, resolveRelative } from "../path" +import { canonicalizeServer, resolveRelative } from "../util/path" function Backlinks({ fileData, allFiles }: QuartzComponentProps) { const slug = canonicalizeServer(fileData.slug!) diff --git a/quartz/components/Head.tsx b/quartz/components/Head.tsx index 0651b95b..bfeb3f13 100644 --- a/quartz/components/Head.tsx +++ b/quartz/components/Head.tsx @@ -1,5 +1,5 @@ -import { canonicalizeServer, pathToRoot } from "../path" -import { JSResourceToScriptElement } from "../resources" +import { canonicalizeServer, pathToRoot } from "../util/path" +import { JSResourceToScriptElement } from "../util/resources" import { QuartzComponentConstructor, QuartzComponentProps } from "./types" export default (() => { diff --git a/quartz/components/PageList.tsx b/quartz/components/PageList.tsx index 7183acb8..83b1b070 100644 --- a/quartz/components/PageList.tsx +++ b/quartz/components/PageList.tsx @@ -1,4 +1,4 @@ -import { CanonicalSlug, canonicalizeServer, resolveRelative } from "../path" +import { CanonicalSlug, canonicalizeServer, resolveRelative } from "../util/path" import { QuartzPluginData } from "../plugins/vfile" import { Date } from "./Date" import { QuartzComponentProps } from "./types" diff --git a/quartz/components/PageTitle.tsx b/quartz/components/PageTitle.tsx index f6319ef9..c1e74f38 100644 --- a/quartz/components/PageTitle.tsx +++ b/quartz/components/PageTitle.tsx @@ -1,4 +1,4 @@ -import { canonicalizeServer, pathToRoot } from "../path" +import { canonicalizeServer, pathToRoot } from "../util/path" import { QuartzComponentConstructor, QuartzComponentProps } from "./types" function PageTitle({ fileData, cfg }: QuartzComponentProps) { diff --git a/quartz/components/TagList.tsx b/quartz/components/TagList.tsx index 65600350..bf5badd8 100644 --- a/quartz/components/TagList.tsx +++ b/quartz/components/TagList.tsx @@ -1,4 +1,4 @@ -import { canonicalizeServer, pathToRoot, slugTag } from "../path" +import { canonicalizeServer, pathToRoot, slugTag } from "../util/path" import { QuartzComponentConstructor, QuartzComponentProps } from "./types" function TagList({ fileData }: QuartzComponentProps) { diff --git a/quartz/components/pages/FolderContent.tsx b/quartz/components/pages/FolderContent.tsx index ea7ab5e5..60379308 100644 --- a/quartz/components/pages/FolderContent.tsx +++ b/quartz/components/pages/FolderContent.tsx @@ -5,7 +5,7 @@ import path from "path" import style from "../styles/listPage.scss" import { PageList } from "../PageList" -import { canonicalizeServer } from "../../path" +import { canonicalizeServer } from "../../util/path" function FolderContent(props: QuartzComponentProps) { const { tree, fileData, allFiles } = props diff --git a/quartz/components/pages/TagContent.tsx b/quartz/components/pages/TagContent.tsx index 5d30240b..2cae40de 100644 --- a/quartz/components/pages/TagContent.tsx +++ b/quartz/components/pages/TagContent.tsx @@ -3,7 +3,7 @@ import { Fragment, jsx, jsxs } from "preact/jsx-runtime" import { toJsxRuntime } from "hast-util-to-jsx-runtime" import style from "../styles/listPage.scss" import { PageList } from "../PageList" -import { ServerSlug, canonicalizeServer, getAllSegmentPrefixes } from "../../path" +import { ServerSlug, canonicalizeServer, getAllSegmentPrefixes } from "../../util/path" import { QuartzPluginData } from "../../plugins/vfile" const numPages = 10 diff --git a/quartz/components/renderPage.tsx b/quartz/components/renderPage.tsx index ab93709c..171c4146 100644 --- a/quartz/components/renderPage.tsx +++ b/quartz/components/renderPage.tsx @@ -2,8 +2,8 @@ import { render } from "preact-render-to-string" import { QuartzComponent, QuartzComponentProps } from "./types" import HeaderConstructor from "./Header" import BodyConstructor from "./Body" -import { JSResourceToScriptElement, StaticResources } from "../resources" -import { CanonicalSlug, pathToRoot } from "../path" +import { JSResourceToScriptElement, StaticResources } from "../util/resources" +import { CanonicalSlug, pathToRoot } from "../util/path" interface RenderComponents { head: QuartzComponent diff --git a/quartz/components/scripts/graph.inline.ts b/quartz/components/scripts/graph.inline.ts index f3f5cbd0..0a7c19ee 100644 --- a/quartz/components/scripts/graph.inline.ts +++ b/quartz/components/scripts/graph.inline.ts @@ -1,7 +1,7 @@ import type { ContentDetails } from "../../plugins/emitters/contentIndex" import * as d3 from "d3" import { registerEscapeHandler, removeAllChildren } from "./util" -import { CanonicalSlug, getCanonicalSlug, getClientSlug, resolveRelative } from "../../path" +import { CanonicalSlug, getCanonicalSlug, getClientSlug, resolveRelative } from "../../util/path" type NodeData = { id: CanonicalSlug diff --git a/quartz/components/scripts/search.inline.ts b/quartz/components/scripts/search.inline.ts index a607fe22..5c7dae01 100644 --- a/quartz/components/scripts/search.inline.ts +++ b/quartz/components/scripts/search.inline.ts @@ -1,7 +1,7 @@ import { Document } from "flexsearch" import { ContentDetails } from "../../plugins/emitters/contentIndex" import { registerEscapeHandler, removeAllChildren } from "./util" -import { CanonicalSlug, getClientSlug, resolveRelative } from "../../path" +import { CanonicalSlug, getClientSlug, resolveRelative } from "../../util/path" interface Item { id: number diff --git a/quartz/components/scripts/spa.inline.ts b/quartz/components/scripts/spa.inline.ts index 4d31b5e2..7e450b76 100644 --- a/quartz/components/scripts/spa.inline.ts +++ b/quartz/components/scripts/spa.inline.ts @@ -1,5 +1,5 @@ import micromorph from "micromorph" -import { CanonicalSlug, RelativeURL, getCanonicalSlug } from "../../path" +import { CanonicalSlug, RelativeURL, getCanonicalSlug } from "../../util/path" // adapted from `micromorph` // https://github.com/natemoo-re/micromorph diff --git a/quartz/plugins/emitters/aliases.ts b/quartz/plugins/emitters/aliases.ts index cf99d29d..1fbea769 100644 --- a/quartz/plugins/emitters/aliases.ts +++ b/quartz/plugins/emitters/aliases.ts @@ -4,7 +4,7 @@ import { ServerSlug, canonicalizeServer, resolveRelative, -} from "../../path" +} from "../../util/path" import { QuartzEmitterPlugin } from "../types" import path from "path" diff --git a/quartz/plugins/emitters/assets.ts b/quartz/plugins/emitters/assets.ts index 0f7f3e41..44bb7185 100644 --- a/quartz/plugins/emitters/assets.ts +++ b/quartz/plugins/emitters/assets.ts @@ -1,8 +1,8 @@ -import { FilePath, joinSegments, slugifyFilePath } from "../../path" +import { FilePath, joinSegments, slugifyFilePath } from "../../util/path" import { QuartzEmitterPlugin } from "../types" import path from "path" import fs from "fs" -import { glob } from "../../glob" +import { glob } from "../../util/glob" export const Assets: QuartzEmitterPlugin = () => { return { diff --git a/quartz/plugins/emitters/componentResources.ts b/quartz/plugins/emitters/componentResources.ts index 859109fc..19eddc64 100644 --- a/quartz/plugins/emitters/componentResources.ts +++ b/quartz/plugins/emitters/componentResources.ts @@ -1,4 +1,4 @@ -import { FilePath, ServerSlug } from "../../path" +import { FilePath, ServerSlug } from "../../util/path" import { QuartzEmitterPlugin } from "../types" // @ts-ignore @@ -9,10 +9,10 @@ import plausibleScript from "../../components/scripts/plausible.inline" import popoverScript from "../../components/scripts/popover.inline" import styles from "../../styles/base.scss" import popoverStyle from "../../components/styles/popover.scss" -import { BuildCtx } from "../../ctx" -import { StaticResources } from "../../resources" +import { BuildCtx } from "../../util/ctx" +import { StaticResources } from "../../util/resources" import { QuartzComponent } from "../../components/types" -import { googleFontHref, joinStyles } from "../../theme" +import { googleFontHref, joinStyles } from "../../util/theme" import { Features, transform } from "lightningcss" type ComponentResources = { diff --git a/quartz/plugins/emitters/contentIndex.ts b/quartz/plugins/emitters/contentIndex.ts index f3a0281e..85cdfe71 100644 --- a/quartz/plugins/emitters/contentIndex.ts +++ b/quartz/plugins/emitters/contentIndex.ts @@ -1,5 +1,11 @@ import { GlobalConfiguration } from "../../cfg" -import { CanonicalSlug, ClientSlug, FilePath, ServerSlug, canonicalizeServer } from "../../path" +import { + CanonicalSlug, + ClientSlug, + FilePath, + ServerSlug, + canonicalizeServer, +} from "../../util/path" import { QuartzEmitterPlugin } from "../types" import path from "path" diff --git a/quartz/plugins/emitters/contentPage.tsx b/quartz/plugins/emitters/contentPage.tsx index dcf28290..b7e347aa 100644 --- a/quartz/plugins/emitters/contentPage.tsx +++ b/quartz/plugins/emitters/contentPage.tsx @@ -4,7 +4,7 @@ import HeaderConstructor from "../../components/Header" import BodyConstructor from "../../components/Body" import { pageResources, renderPage } from "../../components/renderPage" import { FullPageLayout } from "../../cfg" -import { FilePath, canonicalizeServer } from "../../path" +import { FilePath, canonicalizeServer } from "../../util/path" import { defaultContentPageLayout, sharedPageComponents } from "../../../quartz.layout" import { Content } from "../../components" diff --git a/quartz/plugins/emitters/folderPage.tsx b/quartz/plugins/emitters/folderPage.tsx index f5bc7a6a..724717a2 100644 --- a/quartz/plugins/emitters/folderPage.tsx +++ b/quartz/plugins/emitters/folderPage.tsx @@ -6,7 +6,13 @@ import { pageResources, renderPage } from "../../components/renderPage" import { ProcessedContent, defaultProcessedContent } from "../vfile" import { FullPageLayout } from "../../cfg" import path from "path" -import { CanonicalSlug, FilePath, ServerSlug, canonicalizeServer, joinSegments } from "../../path" +import { + CanonicalSlug, + FilePath, + ServerSlug, + canonicalizeServer, + joinSegments, +} from "../../util/path" import { defaultListPageLayout, sharedPageComponents } from "../../../quartz.layout" import { FolderContent } from "../../components" diff --git a/quartz/plugins/emitters/static.ts b/quartz/plugins/emitters/static.ts index 794cbac6..6f5d19d4 100644 --- a/quartz/plugins/emitters/static.ts +++ b/quartz/plugins/emitters/static.ts @@ -1,7 +1,7 @@ -import { FilePath, QUARTZ, joinSegments } from "../../path" +import { FilePath, QUARTZ, joinSegments } from "../../util/path" import { QuartzEmitterPlugin } from "../types" import fs from "fs" -import { glob } from "../../glob" +import { glob } from "../../util/glob" export const Static: QuartzEmitterPlugin = () => ({ name: "Static", diff --git a/quartz/plugins/emitters/tagPage.tsx b/quartz/plugins/emitters/tagPage.tsx index fd00d9c9..de076233 100644 --- a/quartz/plugins/emitters/tagPage.tsx +++ b/quartz/plugins/emitters/tagPage.tsx @@ -11,7 +11,7 @@ import { ServerSlug, getAllSegmentPrefixes, joinSegments, -} from "../../path" +} from "../../util/path" import { defaultListPageLayout, sharedPageComponents } from "../../../quartz.layout" import { TagContent } from "../../components" @@ -41,7 +41,7 @@ export const TagPage: QuartzEmitterPlugin = (userOpts) => { allFiles.flatMap((data) => data.frontmatter?.tags ?? []).flatMap(getAllSegmentPrefixes), ) // add base tag - tags.add("") + tags.add("index") const tagDescriptions: Record = Object.fromEntries( [...tags].map((tag) => { diff --git a/quartz/plugins/index.ts b/quartz/plugins/index.ts index 23440fbe..c83455e4 100644 --- a/quartz/plugins/index.ts +++ b/quartz/plugins/index.ts @@ -1,6 +1,6 @@ -import { StaticResources } from "../resources" -import { FilePath, ServerSlug } from "../path" -import { BuildCtx } from "../ctx" +import { StaticResources } from "../util/resources" +import { FilePath, ServerSlug } from "../util/path" +import { BuildCtx } from "../util/ctx" export function getStaticResourcesFromPlugins(ctx: BuildCtx) { const staticResources: StaticResources = { diff --git a/quartz/plugins/transformers/frontmatter.ts b/quartz/plugins/transformers/frontmatter.ts index e09d20f7..5b067f63 100644 --- a/quartz/plugins/transformers/frontmatter.ts +++ b/quartz/plugins/transformers/frontmatter.ts @@ -2,7 +2,7 @@ import matter from "gray-matter" import remarkFrontmatter from "remark-frontmatter" import { QuartzTransformerPlugin } from "../types" import yaml from "js-yaml" -import { slugTag } from "../../path" +import { slugTag } from "../../util/path" export interface Options { delims: string | string[] diff --git a/quartz/plugins/transformers/links.ts b/quartz/plugins/transformers/links.ts index 10b527c9..a2607196 100644 --- a/quartz/plugins/transformers/links.ts +++ b/quartz/plugins/transformers/links.ts @@ -8,7 +8,7 @@ import { joinSegments, splitAnchor, transformLink, -} from "../../path" +} from "../../util/path" import path from "path" import { visit } from "unist-util-visit" import isAbsoluteUrl from "is-absolute-url" diff --git a/quartz/plugins/transformers/ofm.ts b/quartz/plugins/transformers/ofm.ts index ba3fb9e5..97054b1f 100644 --- a/quartz/plugins/transformers/ofm.ts +++ b/quartz/plugins/transformers/ofm.ts @@ -6,10 +6,10 @@ import { slug as slugAnchor } from "github-slugger" import rehypeRaw from "rehype-raw" import { visit } from "unist-util-visit" import path from "path" -import { JSResource } from "../../resources" +import { JSResource } from "../../util/resources" // @ts-ignore import calloutScript from "../../components/scripts/callout.inline.ts" -import { FilePath, canonicalizeServer, pathToRoot, slugTag, slugifyFilePath } from "../../path" +import { FilePath, canonicalizeServer, pathToRoot, slugTag, slugifyFilePath } from "../../util/path" import { toHast } from "mdast-util-to-hast" import { toHtml } from "hast-util-to-html" import { PhrasingContent } from "mdast-util-find-and-replace/lib" @@ -294,7 +294,7 @@ export const ObsidianFlavoredMarkdown: QuartzTransformerPlugin } const text = firstChild.children[0].value - const restChildren = firstChild.children.splice(1) + const restChildren = firstChild.children.slice(1) const [firstLine, ...remainingLines] = text.split("\n") const remainingText = remainingLines.join("\n") diff --git a/quartz/plugins/types.ts b/quartz/plugins/types.ts index 2662aeda..ad1881b8 100644 --- a/quartz/plugins/types.ts +++ b/quartz/plugins/types.ts @@ -1,9 +1,9 @@ import { PluggableList } from "unified" -import { StaticResources } from "../resources" +import { StaticResources } from "../util/resources" import { ProcessedContent } from "./vfile" import { QuartzComponent } from "../components/types" -import { FilePath, ServerSlug } from "../path" -import { BuildCtx } from "../ctx" +import { FilePath, ServerSlug } from "../util/path" +import { BuildCtx } from "../util/ctx" export interface PluginTypes { transformers: QuartzTransformerPluginInstance[] diff --git a/quartz/processors/emit.ts b/quartz/processors/emit.ts index fd326856..3b357aa9 100644 --- a/quartz/processors/emit.ts +++ b/quartz/processors/emit.ts @@ -1,13 +1,13 @@ import path from "path" import fs from "fs" -import { PerfTimer } from "../perf" +import { PerfTimer } from "../util/perf" import { getStaticResourcesFromPlugins } from "../plugins" import { EmitCallback } from "../plugins/types" import { ProcessedContent } from "../plugins/vfile" -import { FilePath, joinSegments } from "../path" -import { QuartzLogger } from "../log" -import { trace } from "../trace" -import { BuildCtx } from "../ctx" +import { FilePath, joinSegments } from "../util/path" +import { QuartzLogger } from "../util/log" +import { trace } from "../util/trace" +import { BuildCtx } from "../util/ctx" export async function emitContent(ctx: BuildCtx, content: ProcessedContent[]) { const { argv, cfg } = ctx diff --git a/quartz/processors/filter.ts b/quartz/processors/filter.ts index dae6a3d2..b269fb31 100644 --- a/quartz/processors/filter.ts +++ b/quartz/processors/filter.ts @@ -1,5 +1,5 @@ -import { BuildCtx } from "../ctx" -import { PerfTimer } from "../perf" +import { BuildCtx } from "../util/ctx" +import { PerfTimer } from "../util/perf" import { ProcessedContent } from "../plugins/vfile" export function filterContent(ctx: BuildCtx, content: ProcessedContent[]): ProcessedContent[] { diff --git a/quartz/processors/parse.ts b/quartz/processors/parse.ts index 00155279..29f92fc4 100644 --- a/quartz/processors/parse.ts +++ b/quartz/processors/parse.ts @@ -5,14 +5,14 @@ import { Processor, unified } from "unified" import { Root as MDRoot } from "remark-parse/lib" import { Root as HTMLRoot } from "hast" import { ProcessedContent } from "../plugins/vfile" -import { PerfTimer } from "../perf" +import { PerfTimer } from "../util/perf" import { read } from "to-vfile" -import { FilePath, QUARTZ, slugifyFilePath } from "../path" +import { FilePath, QUARTZ, slugifyFilePath } from "../util/path" import path from "path" import workerpool, { Promise as WorkerPromise } from "workerpool" -import { QuartzLogger } from "../log" -import { trace } from "../trace" -import { BuildCtx } from "../ctx" +import { QuartzLogger } from "../util/log" +import { trace } from "../util/trace" +import { BuildCtx } from "../util/ctx" export type QuartzProcessor = Processor export function createProcessor(ctx: BuildCtx): QuartzProcessor { diff --git a/quartz/ctx.ts b/quartz/util/ctx.ts similarity index 87% rename from quartz/ctx.ts rename to quartz/util/ctx.ts index dad5cef5..b1278398 100644 --- a/quartz/ctx.ts +++ b/quartz/util/ctx.ts @@ -1,4 +1,4 @@ -import { QuartzConfig } from "./cfg" +import { QuartzConfig } from "../cfg" import { ServerSlug } from "./path" export interface Argv { diff --git a/quartz/glob.ts b/quartz/util/glob.ts similarity index 100% rename from quartz/glob.ts rename to quartz/util/glob.ts diff --git a/quartz/log.ts b/quartz/util/log.ts similarity index 100% rename from quartz/log.ts rename to quartz/util/log.ts diff --git a/quartz/path.test.ts b/quartz/util/path.test.ts similarity index 96% rename from quartz/path.test.ts rename to quartz/util/path.test.ts index d86bca5f..5655585d 100644 --- a/quartz/path.test.ts +++ b/quartz/util/path.test.ts @@ -53,8 +53,6 @@ describe("typeguards", () => { assert(!path.isRelativeURL("abc")) assert(!path.isRelativeURL("/abc/def")) assert(!path.isRelativeURL("")) - assert(!path.isRelativeURL("../")) - assert(!path.isRelativeURL("./")) assert(!path.isRelativeURL("./abc/def.html")) assert(!path.isRelativeURL("./abc/def.md")) }) @@ -160,17 +158,18 @@ describe("transforms", () => { [ ["", "."], [".", "."], - ["./", "."], - ["./index", "."], - ["./index.html", "."], - ["./index.md", "."], + ["./", "./"], + ["./index", "./"], + ["./index.html", "./"], + ["./index.md", "./"], ["content", "./content"], ["content/test.md", "./content/test"], ["./content/test.md", "./content/test"], ["../content/test.md", "../content/test"], - ["tags/", "./tags"], - ["/tags/", "./tags"], + ["tags/", "./tags/"], + ["/tags/", "./tags/"], ["content/with spaces", "./content/with-spaces"], + ["content/with spaces/index", "./content/with-spaces/"], ["content/with spaces#and Anchor!", "./content/with-spaces#and-anchor"], ], path.transformInternalLink, @@ -269,16 +268,16 @@ describe("link strategies", () => { test("from a/b/c", () => { const cur = "a/b/c" as CanonicalSlug assert.strictEqual(path.transformLink(cur, "d", opts), "./d") - assert.strictEqual(path.transformLink(cur, "index", opts), ".") - assert.strictEqual(path.transformLink(cur, "../../index", opts), "../..") - assert.strictEqual(path.transformLink(cur, "../../", opts), "../..") + assert.strictEqual(path.transformLink(cur, "index", opts), "./") + assert.strictEqual(path.transformLink(cur, "../../index", opts), "../../") + assert.strictEqual(path.transformLink(cur, "../../", opts), "../../") assert.strictEqual(path.transformLink(cur, "../../e/g/h", opts), "../../e/g/h") }) test("from a/b/index", () => { const cur = "a/b" as CanonicalSlug - assert.strictEqual(path.transformLink(cur, "../../index", opts), "../..") - assert.strictEqual(path.transformLink(cur, "../../", opts), "../..") + assert.strictEqual(path.transformLink(cur, "../../index", opts), "../../") + assert.strictEqual(path.transformLink(cur, "../../", opts), "../../") assert.strictEqual(path.transformLink(cur, "../../e/g/h", opts), "../../e/g/h") assert.strictEqual(path.transformLink(cur, "c", opts), "./c") }) @@ -286,7 +285,7 @@ describe("link strategies", () => { test("from index", () => { const cur = "" as CanonicalSlug assert.strictEqual(path.transformLink(cur, "e/g/h", opts), "./e/g/h") - assert.strictEqual(path.transformLink(cur, "a/b/index", opts), "./a/b") + assert.strictEqual(path.transformLink(cur, "a/b/index", opts), "./a/b/") }) }) }) diff --git a/quartz/path.ts b/quartz/util/path.ts similarity index 96% rename from quartz/path.ts rename to quartz/util/path.ts index 8588c21f..c1016af5 100644 --- a/quartz/path.ts +++ b/quartz/util/path.ts @@ -71,7 +71,7 @@ export function isCanonicalSlug(s: string): s is CanonicalSlug { export type RelativeURL = SlugLike<"relative"> export function isRelativeURL(s: string): s is RelativeURL { const validStart = /^\.{1,2}/.test(s) - const validEnding = !(s.endsWith("/") || s.endsWith("/index") || s === "index") + const validEnding = !(s.endsWith("/index") || s === "index") return validStart && validEnding && !_hasFileExtension(s) } @@ -133,6 +133,12 @@ export function slugifyFilePath(fp: FilePath): ServerSlug { export function transformInternalLink(link: string): RelativeURL { let [fplike, anchor] = splitAnchor(decodeURI(link)) + + const folderPath = + fplike.endsWith("index") || + fplike.endsWith("index.md") || + fplike.endsWith("index.html") || + fplike.endsWith("/") let segments = fplike.split("/").filter((x) => x.length > 0) let prefix = segments.filter(_isRelativeSegment).join("/") let fp = segments.filter((seg) => !_isRelativeSegment(seg)).join("/") @@ -143,14 +149,13 @@ export function transformInternalLink(link: string): RelativeURL { } fp = canonicalizeServer(slugifyFilePath(fp as FilePath)) - fp = _trimSuffix(fp, "index") - - let joined = joinSegments(_stripSlashes(prefix), _stripSlashes(fp)) - const res = (_addRelativeToStart(joined) + anchor) as RelativeURL + const joined = joinSegments(_stripSlashes(prefix), _stripSlashes(fp)) + const trail = folderPath ? "/" : "" + const res = (_addRelativeToStart(joined) + anchor + trail) as RelativeURL return res } -// resolve /a/b/c to ../../ +// resolve /a/b/c to ../../.. export function pathToRoot(slug: CanonicalSlug): RelativeURL { let rootPath = slug .split("/") diff --git a/quartz/perf.ts b/quartz/util/perf.ts similarity index 100% rename from quartz/perf.ts rename to quartz/util/perf.ts diff --git a/quartz/resources.tsx b/quartz/util/resources.tsx similarity index 100% rename from quartz/resources.tsx rename to quartz/util/resources.tsx diff --git a/quartz/sourcemap.ts b/quartz/util/sourcemap.ts similarity index 100% rename from quartz/sourcemap.ts rename to quartz/util/sourcemap.ts diff --git a/quartz/theme.ts b/quartz/util/theme.ts similarity index 100% rename from quartz/theme.ts rename to quartz/util/theme.ts diff --git a/quartz/trace.ts b/quartz/util/trace.ts similarity index 100% rename from quartz/trace.ts rename to quartz/util/trace.ts diff --git a/quartz/worker.ts b/quartz/worker.ts index db11cbbc..d42bc251 100644 --- a/quartz/worker.ts +++ b/quartz/worker.ts @@ -1,7 +1,7 @@ import sourceMapSupport from "source-map-support" sourceMapSupport.install(options) import cfg from "../quartz.config" -import { Argv, BuildCtx } from "./ctx" +import { Argv, BuildCtx } from "./util/ctx" import { FilePath, ServerSlug } from "./path" import { createFileParser, createProcessor } from "./processors/parse" import { options } from "./sourcemap" From 2dc0ae279cae87e37c94c42d4ad87107f2a5b5d2 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Wed, 16 Aug 2023 22:09:11 -0700 Subject: [PATCH 475/695] fix import paths --- quartz/cfg.ts | 2 +- quartz/components/types.ts | 2 +- quartz/worker.ts | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/quartz/cfg.ts b/quartz/cfg.ts index 3c9613b7..e3fee360 100644 --- a/quartz/cfg.ts +++ b/quartz/cfg.ts @@ -1,6 +1,6 @@ import { QuartzComponent } from "./components/types" import { PluginTypes } from "./plugins/types" -import { Theme } from "./theme" +import { Theme } from "./util/theme" export type Analytics = | null diff --git a/quartz/components/types.ts b/quartz/components/types.ts index 803ada91..fd9574f5 100644 --- a/quartz/components/types.ts +++ b/quartz/components/types.ts @@ -1,5 +1,5 @@ import { ComponentType, JSX } from "preact" -import { StaticResources } from "../resources" +import { StaticResources } from "../util/resources" import { QuartzPluginData } from "../plugins/vfile" import { GlobalConfiguration } from "../cfg" import { Node } from "hast" diff --git a/quartz/worker.ts b/quartz/worker.ts index d42bc251..3bd7ea79 100644 --- a/quartz/worker.ts +++ b/quartz/worker.ts @@ -2,9 +2,9 @@ import sourceMapSupport from "source-map-support" sourceMapSupport.install(options) import cfg from "../quartz.config" import { Argv, BuildCtx } from "./util/ctx" -import { FilePath, ServerSlug } from "./path" +import { FilePath, ServerSlug } from "./util/path" import { createFileParser, createProcessor } from "./processors/parse" -import { options } from "./sourcemap" +import { options } from "./util/sourcemap" // only called from worker thread export async function parseFiles(argv: Argv, fps: FilePath[], allSlugs: ServerSlug[]) { From 0c199975f2d469ecdfd7efcf2ddd16ffa1dc492b Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Thu, 17 Aug 2023 00:55:28 -0700 Subject: [PATCH 476/695] various path fixes for links to extensions, fix relative paths in links --- content/advanced/making plugins.md | 2 +- content/configuration.md | 2 +- content/features/upcoming features.md | 2 + content/hosting.md | 2 +- .../{dns-records.png => dns records.png} | Bin .../{quartz-layout.png => quartz layout.png} | Bin ...line.png => quartz transform pipeline.png} | Bin content/layout.md | 2 +- quartz/bootstrap-cli.mjs | 20 ++++--- quartz/components/scripts/spa.inline.ts | 3 +- quartz/plugins/emitters/assets.ts | 2 +- quartz/plugins/transformers/lastmod.ts | 1 + quartz/plugins/transformers/links.ts | 3 +- quartz/plugins/transformers/ofm.ts | 2 +- quartz/util/path.test.ts | 55 ++++++++++++------ quartz/util/path.ts | 33 ++++++----- 16 files changed, 77 insertions(+), 52 deletions(-) rename content/images/{dns-records.png => dns records.png} (100%) rename content/images/{quartz-layout.png => quartz layout.png} (100%) rename content/images/{quartz-transform-pipeline.png => quartz transform pipeline.png} (100%) diff --git a/content/advanced/making plugins.md b/content/advanced/making plugins.md index 2de32008..1f1616f4 100644 --- a/content/advanced/making plugins.md +++ b/content/advanced/making plugins.md @@ -7,7 +7,7 @@ title: Making your own plugins Quartz's plugins are a series of transformations over content. This is illustrated in the diagram of the processing pipeline below: -![[quartz-transform-pipeline.png]] +![[quartz transform pipeline.png]] All plugins are defined as a function that takes in a single parameter for options `type OptionType = object | undefined` and return an object that corresponds to the type of plugin it is. diff --git a/content/configuration.md b/content/configuration.md index 182a87b2..763a27a9 100644 --- a/content/configuration.md +++ b/content/configuration.md @@ -50,7 +50,7 @@ This part of the configuration concerns anything that can affect the whole site. You can think of Quartz plugins as a series of transformations over content. -![[quartz-transform-pipeline.png]] +![[quartz transform pipeline.png]] ```ts plugins: { diff --git a/content/features/upcoming features.md b/content/features/upcoming features.md index 8d6c657b..bbf962bc 100644 --- a/content/features/upcoming features.md +++ b/content/features/upcoming features.md @@ -4,6 +4,8 @@ draft: true ## todo +- static icon path (in head) never gets updated + - do we update relative links on spa? - back button with anchors / popovers + spa is broken - debounce cfg rebuild on large repos - investigate content rebuild triggering multiple times even when debounced, causing an esbuild deadlock diff --git a/content/hosting.md b/content/hosting.md index 11dff182..1e900a5b 100644 --- a/content/hosting.md +++ b/content/hosting.md @@ -100,7 +100,7 @@ Here's how to add a custom domain to your GitHub pages deployment. - `185.199.111.153` - If you are using a subdomain, navigate to your DNS provider and create a `CNAME` record that points your subdomain to the default domain for your site. For example, if you want to use the subdomain `quartz.example.com` for your user site, create a `CNAME` record that points `quartz.example.com` to `.github.io`. -![[dns-records.png]]_The above shows a screenshot of Google Domains configured for both `jzhao.xyz` (an apex domain) and `quartz.jzhao.xyz` (a subdomain)._ +![[dns records.png]]_The above shows a screenshot of Google Domains configured for both `jzhao.xyz` (an apex domain) and `quartz.jzhao.xyz` (a subdomain)._ See the [GitHub documentation](https://docs.github.com/en/pages/configuring-a-custom-domain-for-your-github-pages-site/managing-a-custom-domain-for-your-github-pages-site#configuring-a-subdomain) for more detail about how to setup your own custom domain with GitHub Pages. diff --git a/content/images/dns-records.png b/content/images/dns records.png similarity index 100% rename from content/images/dns-records.png rename to content/images/dns records.png diff --git a/content/images/quartz-layout.png b/content/images/quartz layout.png similarity index 100% rename from content/images/quartz-layout.png rename to content/images/quartz layout.png diff --git a/content/images/quartz-transform-pipeline.png b/content/images/quartz transform pipeline.png similarity index 100% rename from content/images/quartz-transform-pipeline.png rename to content/images/quartz transform pipeline.png diff --git a/content/layout.md b/content/layout.md index 80171007..8a74b911 100644 --- a/content/layout.md +++ b/content/layout.md @@ -20,7 +20,7 @@ export interface FullPageLayout { These correspond to following parts of the page: -![[quartz-layout.png|800]] +![[quartz layout.png|800]] > [!note] > There are two additional layout fields that are _not_ shown in the above diagram. diff --git a/quartz/bootstrap-cli.mjs b/quartz/bootstrap-cli.mjs index 077e31b1..8551e764 100755 --- a/quartz/bootstrap-cli.mjs +++ b/quartz/bootstrap-cli.mjs @@ -388,7 +388,7 @@ See the [documentation](https://quartz.jzhao.xyz) for how to get started. await build(clientRefresh) const server = http.createServer(async (req, res) => { - const serve = async (fp) => { + const serve = async () => { await serveHandler(req, res, { public: argv.output, directoryListing: false, @@ -400,11 +400,11 @@ See the [documentation](https://quartz.jzhao.xyz) for how to get started. } const redirect = (newFp) => { - res.writeHead(301, { + res.writeHead(302, { Location: newFp, }) - console.log(chalk.yellow("[301]") + chalk.grey(` ${req.url} -> ${newFp}`)) - return res.end() + console.log(chalk.yellow("[302]") + chalk.grey(` ${req.url} -> ${newFp}`)) + res.end() } let fp = req.url?.split("?")[0] ?? "/" @@ -415,7 +415,8 @@ See the [documentation](https://quartz.jzhao.xyz) for how to get started. // does /trailing/index.html exist? if so, serve it const indexFp = path.posix.join(fp, "index.html") if (fs.existsSync(path.posix.join(argv.output, indexFp))) { - return serve(indexFp) + req.url = fp + return serve() } // does /trailing.html exist? if so, redirect to /trailing @@ -424,7 +425,7 @@ See the [documentation](https://quartz.jzhao.xyz) for how to get started. base += ".html" } if (fs.existsSync(path.posix.join(argv.output, base))) { - return redirect(base) + return redirect(fp.slice(0, -1)) } } else { // /regular @@ -434,7 +435,8 @@ See the [documentation](https://quartz.jzhao.xyz) for how to get started. base += ".html" } if (fs.existsSync(path.posix.join(argv.output, base))) { - return serve(base) + req.url = fp + return serve() } // does /regular/index.html exist? if so, redirect to /regular/ @@ -444,7 +446,7 @@ See the [documentation](https://quartz.jzhao.xyz) for how to get started. } } - return serve(fp) + return serve() }) server.listen(argv.port) console.log(chalk.cyan(`Started a Quartz server listening at http://localhost:${argv.port}`)) @@ -458,7 +460,7 @@ See the [documentation](https://quartz.jzhao.xyz) for how to get started. await build(clientRefresh) }) } else { - await build(() => {}) + await build(() => { }) ctx.dispose() } }) diff --git a/quartz/components/scripts/spa.inline.ts b/quartz/components/scripts/spa.inline.ts index 7e450b76..c28da28c 100644 --- a/quartz/components/scripts/spa.inline.ts +++ b/quartz/components/scripts/spa.inline.ts @@ -17,7 +17,7 @@ const isLocalUrl = (href: string) => { } return true } - } catch (e) {} + } catch (e) { } return false } @@ -50,6 +50,7 @@ async function navigate(url: URL, isBack: boolean = false) { history.pushState({}, "", url) window.scrollTo({ top: 0 }) } + const html = p.parseFromString(contents, "text/html") let title = html.querySelector("title")?.textContent if (title) { diff --git a/quartz/plugins/emitters/assets.ts b/quartz/plugins/emitters/assets.ts index 44bb7185..edc22d9e 100644 --- a/quartz/plugins/emitters/assets.ts +++ b/quartz/plugins/emitters/assets.ts @@ -18,7 +18,7 @@ export const Assets: QuartzEmitterPlugin = () => { for (const fp of fps) { const ext = path.extname(fp) const src = joinSegments(argv.directory, fp) as FilePath - const name = (slugifyFilePath(fp as FilePath) + ext) as FilePath + const name = (slugifyFilePath(fp as FilePath, true) + ext) as FilePath const dest = joinSegments(assetsPath, name) as FilePath const dir = path.dirname(dest) as FilePath diff --git a/quartz/plugins/transformers/lastmod.ts b/quartz/plugins/transformers/lastmod.ts index 15dd89e3..507b5852 100644 --- a/quartz/plugins/transformers/lastmod.ts +++ b/quartz/plugins/transformers/lastmod.ts @@ -36,6 +36,7 @@ export const CreatedModifiedDate: QuartzTransformerPlugin | und } else if (source === "frontmatter" && file.data.frontmatter) { created ||= file.data.frontmatter.date modified ||= file.data.frontmatter.lastmod + modified ||= file.data.frontmatter.updated modified ||= file.data.frontmatter["last-modified"] published ||= file.data.frontmatter.publishDate } else if (source === "git") { diff --git a/quartz/plugins/transformers/links.ts b/quartz/plugins/transformers/links.ts index a2607196..d867039d 100644 --- a/quartz/plugins/transformers/links.ts +++ b/quartz/plugins/transformers/links.ts @@ -79,9 +79,8 @@ export const CrawlLinks: QuartzTransformerPlugin | undefined> = ) { if (!isAbsoluteUrl(node.properties.src)) { let dest = node.properties.src as RelativeURL - const ext = path.extname(node.properties.src) dest = node.properties.src = transformLink(curSlug, dest, transformOptions) - node.properties.src = dest + ext + node.properties.src = dest } } }) diff --git a/quartz/plugins/transformers/ofm.ts b/quartz/plugins/transformers/ofm.ts index 97054b1f..b324daca 100644 --- a/quartz/plugins/transformers/ofm.ts +++ b/quartz/plugins/transformers/ofm.ts @@ -196,7 +196,7 @@ export const ObsidianFlavoredMarkdown: QuartzTransformerPlugin // embed cases if (value.startsWith("!")) { const ext: string = path.extname(fp).toLowerCase() - const url = slugifyFilePath(fp as FilePath) + ext + const url = slugifyFilePath(fp as FilePath) if ([".png", ".jpg", ".jpeg", ".gif", ".bmp", ".svg"].includes(ext)) { const dims = alias ?? "" let [width, height] = dims.split("x", 2) diff --git a/quartz/util/path.test.ts b/quartz/util/path.test.ts index 5655585d..ddbb0ee9 100644 --- a/quartz/util/path.test.ts +++ b/quartz/util/path.test.ts @@ -49,6 +49,7 @@ describe("typeguards", () => { assert(path.isRelativeURL("./abc/def#an-anchor")) assert(path.isRelativeURL("./abc/def?query=1#an-anchor")) assert(path.isRelativeURL("../abc/def")) + assert(path.isRelativeURL("./abc/def.pdf")) assert(!path.isRelativeURL("abc")) assert(!path.isRelativeURL("/abc/def")) @@ -60,12 +61,12 @@ describe("typeguards", () => { test("isServerSlug", () => { assert(path.isServerSlug("index")) assert(path.isServerSlug("abc/def")) + assert(path.isServerSlug("html.energy")) + assert(path.isServerSlug("test.pdf")) assert(!path.isServerSlug(".")) assert(!path.isServerSlug("./abc/def")) assert(!path.isServerSlug("../abc/def")) - assert(!path.isServerSlug("index.html")) - assert(!path.isServerSlug("abc/def.html")) assert(!path.isServerSlug("abc/def#anchor")) assert(!path.isServerSlug("abc/def?query=1")) assert(!path.isServerSlug("note with spaces")) @@ -140,11 +141,12 @@ describe("transforms", () => { asserts( [ ["content/index.md", "content/index"], + ["content/index.html", "content/index"], ["content/_index.md", "content/index"], ["/content/index.md", "content/index"], - ["content/cool.png", "content/cool"], + ["content/cool.png", "content/cool.png"], ["index.md", "index"], - ["test.mp4", "test"], + ["test.mp4", "test.mp4"], ["note with spaces.md", "note-with-spaces"], ], path.slugifyFilePath, @@ -160,10 +162,13 @@ describe("transforms", () => { [".", "."], ["./", "./"], ["./index", "./"], + ["./index#abc", "./#abc"], ["./index.html", "./"], ["./index.md", "./"], + ["./index.css", "./index.css"], ["content", "./content"], ["content/test.md", "./content/test"], + ["content/test.pdf", "./content/test.pdf"], ["./content/test.md", "./content/test"], ["../content/test.md", "../content/test"], ["tags/", "./tags/"], @@ -193,7 +198,7 @@ describe("transforms", () => { }) describe("link strategies", () => { - const allSlugs = ["a/b/c", "a/b/d", "a/b/index", "e/f", "e/g/h", "index"] as ServerSlug[] + const allSlugs = ["a/b/c", "a/b/d", "a/b/index", "e/f", "e/g/h", "index", "a/test.png"] as ServerSlug[] describe("absolute", () => { const opts: TransformOptions = { @@ -204,27 +209,29 @@ describe("link strategies", () => { test("from a/b/c", () => { const cur = "a/b/c" as CanonicalSlug assert.strictEqual(path.transformLink(cur, "a/b/d", opts), "../../../a/b/d") - assert.strictEqual(path.transformLink(cur, "a/b/index", opts), "../../../a/b") + assert.strictEqual(path.transformLink(cur, "a/b/index", opts), "../../../a/b/") assert.strictEqual(path.transformLink(cur, "e/f", opts), "../../../e/f") assert.strictEqual(path.transformLink(cur, "e/g/h", opts), "../../../e/g/h") - assert.strictEqual(path.transformLink(cur, "index", opts), "../../..") + assert.strictEqual(path.transformLink(cur, "index", opts), "../../../") + assert.strictEqual(path.transformLink(cur, "index.png", opts), "../../../index.png") assert.strictEqual(path.transformLink(cur, "index#abc", opts), "../../../#abc") assert.strictEqual(path.transformLink(cur, "tag/test", opts), "../../../tag/test") assert.strictEqual(path.transformLink(cur, "a/b/c#test", opts), "../../../a/b/c#test") + assert.strictEqual(path.transformLink(cur, "a/test.png", opts), "../../../a/test.png") }) test("from a/b/index", () => { const cur = "a/b" as CanonicalSlug assert.strictEqual(path.transformLink(cur, "a/b/d", opts), "../../a/b/d") assert.strictEqual(path.transformLink(cur, "a/b", opts), "../../a/b") - assert.strictEqual(path.transformLink(cur, "index", opts), "../..") + assert.strictEqual(path.transformLink(cur, "index", opts), "../../") }) test("from index", () => { const cur = "" as CanonicalSlug - assert.strictEqual(path.transformLink(cur, "index", opts), ".") + assert.strictEqual(path.transformLink(cur, "index", opts), "./") assert.strictEqual(path.transformLink(cur, "a/b/c", opts), "./a/b/c") - assert.strictEqual(path.transformLink(cur, "a/b/index", opts), "./a/b") + assert.strictEqual(path.transformLink(cur, "a/b/index", opts), "./a/b/") }) }) @@ -238,24 +245,29 @@ describe("link strategies", () => { const cur = "a/b/c" as CanonicalSlug assert.strictEqual(path.transformLink(cur, "d", opts), "../../../a/b/d") assert.strictEqual(path.transformLink(cur, "h", opts), "../../../e/g/h") - assert.strictEqual(path.transformLink(cur, "a/b/index", opts), "../../../a/b") - assert.strictEqual(path.transformLink(cur, "index", opts), "../../..") + assert.strictEqual(path.transformLink(cur, "a/b/index", opts), "../../../a/b/") + assert.strictEqual(path.transformLink(cur, "a/b/index.png", opts), "../../../a/b/index.png") + assert.strictEqual(path.transformLink(cur, "a/b/index#abc", opts), "../../../a/b/#abc") + assert.strictEqual(path.transformLink(cur, "index", opts), "../../../") + assert.strictEqual(path.transformLink(cur, "index.png", opts), "../../../index.png") + assert.strictEqual(path.transformLink(cur, "test.png", opts), "../../../a/test.png") + assert.strictEqual(path.transformLink(cur, "index#abc", opts), "../../../#abc") }) test("from a/b/index", () => { const cur = "a/b" as CanonicalSlug assert.strictEqual(path.transformLink(cur, "d", opts), "../../a/b/d") assert.strictEqual(path.transformLink(cur, "h", opts), "../../e/g/h") - assert.strictEqual(path.transformLink(cur, "a/b/index", opts), "../../a/b") - assert.strictEqual(path.transformLink(cur, "index", opts), "../..") + assert.strictEqual(path.transformLink(cur, "a/b/index", opts), "../../a/b/") + assert.strictEqual(path.transformLink(cur, "index", opts), "../../") }) test("from index", () => { const cur = "" as CanonicalSlug assert.strictEqual(path.transformLink(cur, "d", opts), "./a/b/d") assert.strictEqual(path.transformLink(cur, "h", opts), "./e/g/h") - assert.strictEqual(path.transformLink(cur, "a/b/index", opts), "./a/b") - assert.strictEqual(path.transformLink(cur, "index", opts), ".") + assert.strictEqual(path.transformLink(cur, "a/b/index", opts), "./a/b/") + assert.strictEqual(path.transformLink(cur, "index", opts), "./") }) }) @@ -269,9 +281,14 @@ describe("link strategies", () => { const cur = "a/b/c" as CanonicalSlug assert.strictEqual(path.transformLink(cur, "d", opts), "./d") assert.strictEqual(path.transformLink(cur, "index", opts), "./") - assert.strictEqual(path.transformLink(cur, "../../index", opts), "../../") - assert.strictEqual(path.transformLink(cur, "../../", opts), "../../") - assert.strictEqual(path.transformLink(cur, "../../e/g/h", opts), "../../e/g/h") + assert.strictEqual(path.transformLink(cur, "../../../index", opts), "../../../") + assert.strictEqual(path.transformLink(cur, "../../../index.png", opts), "../../../index.png") + assert.strictEqual(path.transformLink(cur, "../../../index#abc", opts), "../../../#abc") + assert.strictEqual(path.transformLink(cur, "../../../", opts), "../../../") + assert.strictEqual(path.transformLink(cur, "../../../a/test.png", opts), "../../../a/test.png") + assert.strictEqual(path.transformLink(cur, "../../../e/g/h", opts), "../../../e/g/h") + assert.strictEqual(path.transformLink(cur, "../../../e/g/h", opts), "../../../e/g/h") + assert.strictEqual(path.transformLink(cur, "../../../e/g/h#abc", opts), "../../../e/g/h#abc") }) test("from a/b/index", () => { diff --git a/quartz/util/path.ts b/quartz/util/path.ts index c1016af5..c949474f 100644 --- a/quartz/util/path.ts +++ b/quartz/util/path.ts @@ -72,7 +72,7 @@ export type RelativeURL = SlugLike<"relative"> export function isRelativeURL(s: string): s is RelativeURL { const validStart = /^\.{1,2}/.test(s) const validEnding = !(s.endsWith("/index") || s === "index") - return validStart && validEnding && !_hasFileExtension(s) + return validStart && validEnding && ![".md", ".html"].includes(_getFileExtension(s) ?? "") } /** A server side slug. This is what Quartz uses to emit files so uses index suffixes */ @@ -80,7 +80,7 @@ export type ServerSlug = SlugLike<"server"> export function isServerSlug(s: string): s is ServerSlug { const validStart = !(s.startsWith(".") || s.startsWith("/")) const validEnding = !s.endsWith("/") - return validStart && validEnding && !_containsForbiddenCharacters(s) && !_hasFileExtension(s) + return validStart && validEnding && !_containsForbiddenCharacters(s) } /** The real file path to a file on disk */ @@ -114,9 +114,14 @@ export function canonicalizeServer(slug: ServerSlug): CanonicalSlug { return res } -export function slugifyFilePath(fp: FilePath): ServerSlug { +export function slugifyFilePath(fp: FilePath, excludeExt?: boolean): ServerSlug { fp = _stripSlashes(fp) as FilePath - const withoutFileExt = fp.replace(new RegExp(_getFileExtension(fp) + "$"), "") + let ext = _getFileExtension(fp) + const withoutFileExt = fp.replace(new RegExp(ext + "$"), "") + if (excludeExt || [".md", ".html", undefined].includes(ext)) { + ext = "" + } + let slug = withoutFileExt .split("/") .map((segment) => segment.replace(/\s/g, "-")) // slugify all segments @@ -128,7 +133,7 @@ export function slugifyFilePath(fp: FilePath): ServerSlug { slug = slug.replace(/_index$/, "index") } - return slug as ServerSlug + return slug + ext as ServerSlug } export function transformInternalLink(link: string): RelativeURL { @@ -139,19 +144,16 @@ export function transformInternalLink(link: string): RelativeURL { fplike.endsWith("index.md") || fplike.endsWith("index.html") || fplike.endsWith("/") + let segments = fplike.split("/").filter((x) => x.length > 0) let prefix = segments.filter(_isRelativeSegment).join("/") let fp = segments.filter((seg) => !_isRelativeSegment(seg)).join("/") - // implicit markdown - if (!_hasFileExtension(fp)) { - fp += ".md" - } - - fp = canonicalizeServer(slugifyFilePath(fp as FilePath)) + // manually add ext here as we want to not strip 'index' if it has an extension + fp = canonicalizeServer(slugifyFilePath(fp as FilePath) as ServerSlug) const joined = joinSegments(_stripSlashes(prefix), _stripSlashes(fp)) const trail = folderPath ? "/" : "" - const res = (_addRelativeToStart(joined) + anchor + trail) as RelativeURL + const res = (_addRelativeToStart(joined) + trail + anchor) as RelativeURL return res } @@ -217,8 +219,9 @@ export function transformLink( if (opts.strategy === "relative") { return _addRelativeToStart(targetSlug) as RelativeURL } else { - targetSlug = _stripSlashes(targetSlug.slice(".".length)) - let [targetCanonical, targetAnchor] = splitAnchor(targetSlug) + const folderTail = targetSlug.endsWith("/") ? "/" : "" + const canonicalSlug = _stripSlashes(targetSlug.slice(".".length)) + let [targetCanonical, targetAnchor] = splitAnchor(canonicalSlug) if (opts.strategy === "shortest") { // if the file name is unique, then it's just the filename @@ -236,7 +239,7 @@ export function transformLink( } // if it's not unique, then it's the absolute path from the vault root - return joinSegments(pathToRoot(src), targetSlug) as RelativeURL + return joinSegments(pathToRoot(src), canonicalSlug) + folderTail as RelativeURL } } From 58d9dc0528cc5d7232ac7a237c98213ff1075f39 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Thu, 17 Aug 2023 00:55:52 -0700 Subject: [PATCH 477/695] format --- content/features/upcoming features.md | 2 +- quartz/bootstrap-cli.mjs | 2 +- quartz/components/scripts/spa.inline.ts | 2 +- quartz/util/path.test.ts | 15 +++++++++++++-- quartz/util/path.ts | 6 +++--- 5 files changed, 19 insertions(+), 8 deletions(-) diff --git a/content/features/upcoming features.md b/content/features/upcoming features.md index bbf962bc..2045be7b 100644 --- a/content/features/upcoming features.md +++ b/content/features/upcoming features.md @@ -5,7 +5,7 @@ draft: true ## todo - static icon path (in head) never gets updated - - do we update relative links on spa? + - do we update relative links on spa? - back button with anchors / popovers + spa is broken - debounce cfg rebuild on large repos - investigate content rebuild triggering multiple times even when debounced, causing an esbuild deadlock diff --git a/quartz/bootstrap-cli.mjs b/quartz/bootstrap-cli.mjs index 8551e764..c1c13085 100755 --- a/quartz/bootstrap-cli.mjs +++ b/quartz/bootstrap-cli.mjs @@ -460,7 +460,7 @@ See the [documentation](https://quartz.jzhao.xyz) for how to get started. await build(clientRefresh) }) } else { - await build(() => { }) + await build(() => {}) ctx.dispose() } }) diff --git a/quartz/components/scripts/spa.inline.ts b/quartz/components/scripts/spa.inline.ts index c28da28c..1b44ade0 100644 --- a/quartz/components/scripts/spa.inline.ts +++ b/quartz/components/scripts/spa.inline.ts @@ -17,7 +17,7 @@ const isLocalUrl = (href: string) => { } return true } - } catch (e) { } + } catch (e) {} return false } diff --git a/quartz/util/path.test.ts b/quartz/util/path.test.ts index ddbb0ee9..cbfd86b5 100644 --- a/quartz/util/path.test.ts +++ b/quartz/util/path.test.ts @@ -198,7 +198,15 @@ describe("transforms", () => { }) describe("link strategies", () => { - const allSlugs = ["a/b/c", "a/b/d", "a/b/index", "e/f", "e/g/h", "index", "a/test.png"] as ServerSlug[] + const allSlugs = [ + "a/b/c", + "a/b/d", + "a/b/index", + "e/f", + "e/g/h", + "index", + "a/test.png", + ] as ServerSlug[] describe("absolute", () => { const opts: TransformOptions = { @@ -285,7 +293,10 @@ describe("link strategies", () => { assert.strictEqual(path.transformLink(cur, "../../../index.png", opts), "../../../index.png") assert.strictEqual(path.transformLink(cur, "../../../index#abc", opts), "../../../#abc") assert.strictEqual(path.transformLink(cur, "../../../", opts), "../../../") - assert.strictEqual(path.transformLink(cur, "../../../a/test.png", opts), "../../../a/test.png") + assert.strictEqual( + path.transformLink(cur, "../../../a/test.png", opts), + "../../../a/test.png", + ) assert.strictEqual(path.transformLink(cur, "../../../e/g/h", opts), "../../../e/g/h") assert.strictEqual(path.transformLink(cur, "../../../e/g/h", opts), "../../../e/g/h") assert.strictEqual(path.transformLink(cur, "../../../e/g/h#abc", opts), "../../../e/g/h#abc") diff --git a/quartz/util/path.ts b/quartz/util/path.ts index c949474f..7394a431 100644 --- a/quartz/util/path.ts +++ b/quartz/util/path.ts @@ -72,7 +72,7 @@ export type RelativeURL = SlugLike<"relative"> export function isRelativeURL(s: string): s is RelativeURL { const validStart = /^\.{1,2}/.test(s) const validEnding = !(s.endsWith("/index") || s === "index") - return validStart && validEnding && ![".md", ".html"].includes(_getFileExtension(s) ?? "") + return validStart && validEnding && ![".md", ".html"].includes(_getFileExtension(s) ?? "") } /** A server side slug. This is what Quartz uses to emit files so uses index suffixes */ @@ -133,7 +133,7 @@ export function slugifyFilePath(fp: FilePath, excludeExt?: boolean): ServerSlug slug = slug.replace(/_index$/, "index") } - return slug + ext as ServerSlug + return (slug + ext) as ServerSlug } export function transformInternalLink(link: string): RelativeURL { @@ -239,7 +239,7 @@ export function transformLink( } // if it's not unique, then it's the absolute path from the vault root - return joinSegments(pathToRoot(src), canonicalSlug) + folderTail as RelativeURL + return (joinSegments(pathToRoot(src), canonicalSlug) + folderTail) as RelativeURL } } From 07a327e05aa2a48aa11faf9aa0e049201d622f8f Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Thu, 17 Aug 2023 01:34:50 -0700 Subject: [PATCH 478/695] fix back button in spa not working between two pages that both have hash fragments --- content/features/upcoming features.md | 3 --- quartz/components/scripts/graph.inline.ts | 1 - quartz/components/scripts/search.inline.ts | 1 - quartz/components/scripts/spa.inline.ts | 21 +++++++++++++++------ 4 files changed, 15 insertions(+), 11 deletions(-) diff --git a/content/features/upcoming features.md b/content/features/upcoming features.md index 2045be7b..7093a5bf 100644 --- a/content/features/upcoming features.md +++ b/content/features/upcoming features.md @@ -4,9 +4,6 @@ draft: true ## todo -- static icon path (in head) never gets updated - - do we update relative links on spa? -- back button with anchors / popovers + spa is broken - debounce cfg rebuild on large repos - investigate content rebuild triggering multiple times even when debounced, causing an esbuild deadlock - dereference symlink for npx quartz sync diff --git a/quartz/components/scripts/graph.inline.ts b/quartz/components/scripts/graph.inline.ts index 0a7c19ee..bea32eb3 100644 --- a/quartz/components/scripts/graph.inline.ts +++ b/quartz/components/scripts/graph.inline.ts @@ -179,7 +179,6 @@ async function renderGraph(container: string, slug: CanonicalSlug) { const neighbourNodes = d3 .selectAll(".node") .filter((d) => neighbours.includes(d.id)) - console.log(neighbourNodes) const currentId = d.id const linkNodes = d3 .selectAll(".link") diff --git a/quartz/components/scripts/search.inline.ts b/quartz/components/scripts/search.inline.ts index 5c7dae01..b94cdfbc 100644 --- a/quartz/components/scripts/search.inline.ts +++ b/quartz/components/scripts/search.inline.ts @@ -148,7 +148,6 @@ document.addEventListener("nav", async (e: unknown) => { async function onType(e: HTMLElementEventMap["input"]) { const term = (e.target as HTMLInputElement).value const searchResults = (await index?.searchAsync(term, numSearchResults)) ?? [] - console.log(searchResults) const getByField = (field: string): number[] => { const results = searchResults.filter((x) => x.field === field) return results.length === 0 ? [] : ([...results[0].result] as number[]) diff --git a/quartz/components/scripts/spa.inline.ts b/quartz/components/scripts/spa.inline.ts index 1b44ade0..e0a83731 100644 --- a/quartz/components/scripts/spa.inline.ts +++ b/quartz/components/scripts/spa.inline.ts @@ -46,10 +46,6 @@ async function navigate(url: URL, isBack: boolean = false) { }) if (!contents) return - if (!isBack) { - history.pushState({}, "", url) - window.scrollTo({ top: 0 }) - } const html = p.parseFromString(contents, "text/html") let title = html.querySelector("title")?.textContent @@ -65,8 +61,20 @@ async function navigate(url: URL, isBack: boolean = false) { announcer.dataset.persist = "" html.body.appendChild(announcer) + // morph body micromorph(document.body, html.body) + // scroll into place and add history + if (!isBack) { + history.pushState({}, "", url) + if (url.hash) { + const el = document.getElementById(url.hash.substring(1)) + el?.scrollIntoView() + } else { + window.scrollTo({ top: 0 }) + } + } + // now, patch head const elementsToRemove = document.head.querySelectorAll(":not([spa-preserve])") elementsToRemove.forEach((el) => el.remove()) @@ -92,8 +100,9 @@ function createRouter() { } }) - window.addEventListener("popstate", () => { - if (window.location.hash) return + window.addEventListener("popstate", (event) => { + const { url } = getOpts(event) ?? {} + if (window.location.hash && window.location.pathname === url?.pathname) return try { navigate(new URL(window.location.toString()), true) } catch (e) { From 0998bc355e6425e6b2bdf3d2da7124aa7b63b2a2 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Thu, 17 Aug 2023 01:58:11 -0700 Subject: [PATCH 479/695] fix rebuild debouncing --- content/features/upcoming features.md | 3 +- quartz/bootstrap-cli.mjs | 8 +++- quartz/build.ts | 68 +++++++++++++-------------- 3 files changed, 42 insertions(+), 37 deletions(-) diff --git a/content/features/upcoming features.md b/content/features/upcoming features.md index 7093a5bf..28ee48a4 100644 --- a/content/features/upcoming features.md +++ b/content/features/upcoming features.md @@ -4,9 +4,8 @@ draft: true ## todo -- debounce cfg rebuild on large repos - - investigate content rebuild triggering multiple times even when debounced, causing an esbuild deadlock - dereference symlink for npx quartz sync + - prompt user as to whether to do it (it's expensive for large vaults) ## high priority backlog diff --git a/quartz/bootstrap-cli.mjs b/quartz/bootstrap-cli.mjs index c1c13085..8efa7b04 100755 --- a/quartz/bootstrap-cli.mjs +++ b/quartz/bootstrap-cli.mjs @@ -355,6 +355,7 @@ See the [documentation](https://quartz.jzhao.xyz) for how to get started. ], }) + const timeoutIds = new Set() const build = async (clientRefresh) => { const result = await ctx.rebuild().catch((err) => { console.error(`${chalk.red("Couldn't parse Quartz configuration:")} ${fp}`) @@ -380,6 +381,11 @@ See the [documentation](https://quartz.jzhao.xyz) for how to get started. clientRefresh() } + const rebuild = (clientRefresh) => { + timeoutIds.forEach((id) => clearTimeout(id)) + timeoutIds.add(setTimeout(() => build(clientRefresh), 250)) + } + if (argv.serve) { const wss = new WebSocketServer({ port: 3001 }) const connections = [] @@ -457,7 +463,7 @@ See the [documentation](https://quartz.jzhao.xyz) for how to get started. }) .on("all", async () => { console.log(chalk.yellow("Detected a source code change, doing a hard rebuild...")) - await build(clientRefresh) + rebuild(clientRefresh) }) } else { await build(() => {}) diff --git a/quartz/build.ts b/quartz/build.ts index 779ab35e..b5b1f9ee 100644 --- a/quartz/build.ts +++ b/quartz/build.ts @@ -77,7 +77,7 @@ async function startServing( } const initialSlugs = ctx.allSlugs - let timeoutId: ReturnType | null = null + let timeoutIds: Set> = new Set() let toRebuild: Set = new Set() let toRemove: Set = new Set() let trackedAssets: Set = new Set() @@ -106,45 +106,45 @@ async function startServing( toRemove.add(filePath) } - if (timeoutId) { - clearTimeout(timeoutId) - } + timeoutIds.forEach((id) => clearTimeout(id)) // debounce rebuilds every 250ms - timeoutId = setTimeout(async () => { - const perf = new PerfTimer() - console.log(chalk.yellow("Detected change, rebuilding...")) - try { - const filesToRebuild = [...toRebuild].filter((fp) => !toRemove.has(fp)) + timeoutIds.add( + setTimeout(async () => { + const perf = new PerfTimer() + console.log(chalk.yellow("Detected change, rebuilding...")) + try { + const filesToRebuild = [...toRebuild].filter((fp) => !toRemove.has(fp)) - const trackedSlugs = [...new Set([...contentMap.keys(), ...toRebuild, ...trackedAssets])] - .filter((fp) => !toRemove.has(fp)) - .map((fp) => slugifyFilePath(path.posix.relative(argv.directory, fp) as FilePath)) + const trackedSlugs = [...new Set([...contentMap.keys(), ...toRebuild, ...trackedAssets])] + .filter((fp) => !toRemove.has(fp)) + .map((fp) => slugifyFilePath(path.posix.relative(argv.directory, fp) as FilePath)) - ctx.allSlugs = [...new Set([...initialSlugs, ...trackedSlugs])] - const parsedContent = await parseMarkdown(ctx, filesToRebuild) - for (const content of parsedContent) { - const [_tree, vfile] = content - contentMap.set(vfile.data.filePath!, content) + ctx.allSlugs = [...new Set([...initialSlugs, ...trackedSlugs])] + const parsedContent = await parseMarkdown(ctx, filesToRebuild) + for (const content of parsedContent) { + const [_tree, vfile] = content + contentMap.set(vfile.data.filePath!, content) + } + + for (const fp of toRemove) { + contentMap.delete(fp) + } + + await rimraf(argv.output) + const parsedFiles = [...contentMap.values()] + const filteredContent = filterContent(ctx, parsedFiles) + await emitContent(ctx, filteredContent) + console.log(chalk.green(`Done rebuilding in ${perf.timeSince()}`)) + } catch { + console.log(chalk.yellow(`Rebuild failed. Waiting on a change to fix the error...`)) } - for (const fp of toRemove) { - contentMap.delete(fp) - } - - await rimraf(argv.output) - const parsedFiles = [...contentMap.values()] - const filteredContent = filterContent(ctx, parsedFiles) - await emitContent(ctx, filteredContent) - console.log(chalk.green(`Done rebuilding in ${perf.timeSince()}`)) - } catch { - console.log(chalk.yellow(`Rebuild failed. Waiting on a change to fix the error...`)) - } - - clientRefresh() - toRebuild.clear() - toRemove.clear() - }, 250) + clientRefresh() + toRebuild.clear() + toRemove.clear() + }, 250), + ) } const watcher = chokidar.watch(".", { From a7cca3242ad7adc5163d70aa2cc8ee23c92211e5 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Thu, 17 Aug 2023 21:07:40 -0700 Subject: [PATCH 480/695] deref symlink on quartz sync --- content/features/upcoming features.md | 6 ----- quartz/bootstrap-cli.mjs | 36 +++++++++++++++++++++------ 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/content/features/upcoming features.md b/content/features/upcoming features.md index 28ee48a4..48acf605 100644 --- a/content/features/upcoming features.md +++ b/content/features/upcoming features.md @@ -1,12 +1,6 @@ --- draft: true --- - -## todo - -- dereference symlink for npx quartz sync - - prompt user as to whether to do it (it's expensive for large vaults) - ## high priority backlog - block links: https://help.obsidian.md/Linking+notes+and+files/Internal+links#Link+to+a+block+in+a+note diff --git a/quartz/bootstrap-cli.mjs b/quartz/bootstrap-cli.mjs index 8efa7b04..f7c7bee4 100755 --- a/quartz/bootstrap-cli.mjs +++ b/quartz/bootstrap-cli.mjs @@ -112,6 +112,7 @@ function exitIfCancel(val) { } async function stashContentFolder(contentFolder) { + await fs.promises.rm(contentCacheFolder, { force: true, recursive: true }) await fs.promises.cp(contentFolder, contentCacheFolder, { force: true, recursive: true, @@ -150,7 +151,7 @@ yargs(hideBin(process.argv)) message: `Choose how to initialize the content in \`${contentFolder}\``, options: [ { value: "new", label: "Empty Quartz" }, - { value: "copy", label: "Replace with an existing folder", hint: "overwrites `content`" }, + { value: "copy", label: "Copy an existing folder", hint: "overwrites `content`" }, { value: "symlink", label: "Symlink an existing folder", @@ -163,12 +164,10 @@ yargs(hideBin(process.argv)) async function rmContentFolder() { const contentStat = await fs.promises.lstat(contentFolder) - if (contentStat) { - if (contentStat.isSymbolicLink()) { - await fs.promises.unlink(contentFolder) - } else { - await rimraf(contentFolder) - } + if (contentStat.isSymbolicLink()) { + await fs.promises.unlink(contentFolder) + } else { + await rimraf(contentFolder) } } @@ -274,11 +273,32 @@ See the [documentation](https://quartz.jzhao.xyz) for how to get started. console.log("Backing up your content") if (argv.commit) { + const contentStat = await fs.promises.lstat(contentFolder) + if (contentStat.isSymbolicLink()) { + console.log(chalk.yellow("Detected symlink, trying to dereference before committing")) + + // stash symlink file + await stashContentFolder(contentFolder) + + // follow symlink and copy content + const linkTarg = await fs.promises.readlink(contentFolder) + await fs.promises.cp(linkTarg, contentFolder, { + force: true, + recursive: true, + preserveTimestamps: true, + }) + } + const currentTimestamp = new Date().toLocaleString("en-US", { dateStyle: "medium", timeStyle: "short", }) spawnSync("git", ["commit", "-am", `Quartz sync: ${currentTimestamp}`], { stdio: "inherit" }) + + if (contentStat.isSymbolicLink()) { + // put symlink back + await popContentFolder() + } } await stashContentFolder(contentFolder) @@ -466,7 +486,7 @@ See the [documentation](https://quartz.jzhao.xyz) for how to get started. rebuild(clientRefresh) }) } else { - await build(() => {}) + await build(() => { }) ctx.dispose() } }) From e10f6da01140f483162fe33cc77b2255b0683ac7 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Thu, 17 Aug 2023 21:08:26 -0700 Subject: [PATCH 481/695] format --- content/features/upcoming features.md | 1 + quartz/bootstrap-cli.mjs | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/content/features/upcoming features.md b/content/features/upcoming features.md index 48acf605..a3f44be1 100644 --- a/content/features/upcoming features.md +++ b/content/features/upcoming features.md @@ -1,6 +1,7 @@ --- draft: true --- + ## high priority backlog - block links: https://help.obsidian.md/Linking+notes+and+files/Internal+links#Link+to+a+block+in+a+note diff --git a/quartz/bootstrap-cli.mjs b/quartz/bootstrap-cli.mjs index f7c7bee4..02855514 100755 --- a/quartz/bootstrap-cli.mjs +++ b/quartz/bootstrap-cli.mjs @@ -486,7 +486,7 @@ See the [documentation](https://quartz.jzhao.xyz) for how to get started. rebuild(clientRefresh) }) } else { - await build(() => { }) + await build(() => {}) ctx.dispose() } }) From a13094544318b06902b54a24ea61691fe598a2fc Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Thu, 17 Aug 2023 21:20:15 -0700 Subject: [PATCH 482/695] fix when symlink targ is calculated and added npx quartz restore --- quartz/bootstrap-cli.mjs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/quartz/bootstrap-cli.mjs b/quartz/bootstrap-cli.mjs index 02855514..990022e3 100755 --- a/quartz/bootstrap-cli.mjs +++ b/quartz/bootstrap-cli.mjs @@ -267,6 +267,9 @@ See the [documentation](https://quartz.jzhao.xyz) for how to get started. spawnSync("npm", ["i"], { stdio: "inherit" }) console.log(chalk.green("Done!")) }) + .command("restore", "Try to restore your content folder from the cache", async () => { + await popContentFolder() + }) .command("sync", "Sync your Quartz to and from GitHub.", SyncArgv, async (argv) => { const contentFolder = path.join(cwd, argv.directory) console.log(chalk.bgGreen.black(`\n Quartz v${version} \n`)) @@ -275,13 +278,13 @@ See the [documentation](https://quartz.jzhao.xyz) for how to get started. if (argv.commit) { const contentStat = await fs.promises.lstat(contentFolder) if (contentStat.isSymbolicLink()) { + const linkTarg = await fs.promises.readlink(contentFolder) console.log(chalk.yellow("Detected symlink, trying to dereference before committing")) // stash symlink file await stashContentFolder(contentFolder) // follow symlink and copy content - const linkTarg = await fs.promises.readlink(contentFolder) await fs.promises.cp(linkTarg, contentFolder, { force: true, recursive: true, From 5713d30670fc9ca1f9d86e6f0698bd011a68f674 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Thu, 17 Aug 2023 21:24:41 -0700 Subject: [PATCH 483/695] ensure contentfolder is passed to popContentFolder --- quartz/bootstrap-cli.mjs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/quartz/bootstrap-cli.mjs b/quartz/bootstrap-cli.mjs index 990022e3..11783035 100755 --- a/quartz/bootstrap-cli.mjs +++ b/quartz/bootstrap-cli.mjs @@ -267,9 +267,15 @@ See the [documentation](https://quartz.jzhao.xyz) for how to get started. spawnSync("npm", ["i"], { stdio: "inherit" }) console.log(chalk.green("Done!")) }) - .command("restore", "Try to restore your content folder from the cache", async () => { - await popContentFolder() - }) + .command( + "restore", + "Try to restore your content folder from the cache", + CommonArgv, + async (argv) => { + const contentFolder = path.join(cwd, argv.directory) + await popContentFolder(contentFolder) + }, + ) .command("sync", "Sync your Quartz to and from GitHub.", SyncArgv, async (argv) => { const contentFolder = path.join(cwd, argv.directory) console.log(chalk.bgGreen.black(`\n Quartz v${version} \n`)) @@ -300,7 +306,7 @@ See the [documentation](https://quartz.jzhao.xyz) for how to get started. if (contentStat.isSymbolicLink()) { // put symlink back - await popContentFolder() + await popContentFolder(contentFolder) } } From 569beb410b967b8511a5d18cdee74280df681d15 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Thu, 17 Aug 2023 21:49:58 -0700 Subject: [PATCH 484/695] ensure sync includes untracked files --- quartz/bootstrap-cli.mjs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/quartz/bootstrap-cli.mjs b/quartz/bootstrap-cli.mjs index 11783035..a39e2915 100755 --- a/quartz/bootstrap-cli.mjs +++ b/quartz/bootstrap-cli.mjs @@ -192,7 +192,7 @@ yargs(hideBin(process.argv)) await rmContentFolder() if (setupStrategy === "copy") { - await fs.promises.cp(originalFolder, contentFolder, { recursive: true }) + await fs.promises.cp(originalFolder, contentFolder, { recursive: true, preserveTimestamps: true }) } else if (setupStrategy === "symlink") { await fs.promises.symlink(originalFolder, contentFolder, "dir") } @@ -292,7 +292,6 @@ See the [documentation](https://quartz.jzhao.xyz) for how to get started. // follow symlink and copy content await fs.promises.cp(linkTarg, contentFolder, { - force: true, recursive: true, preserveTimestamps: true, }) @@ -302,7 +301,8 @@ See the [documentation](https://quartz.jzhao.xyz) for how to get started. dateStyle: "medium", timeStyle: "short", }) - spawnSync("git", ["commit", "-am", `Quartz sync: ${currentTimestamp}`], { stdio: "inherit" }) + spawnSync("git", ["add", "."], { stdio: "inherit" }) + spawnSync("git", ["commit", "-m", `Quartz sync: ${currentTimestamp}`], { stdio: "inherit" }) if (contentStat.isSymbolicLink()) { // put symlink back From 8bc7a50dfa91dd7ba6b657aca6dbc437fa6df6b7 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Thu, 17 Aug 2023 21:54:42 -0700 Subject: [PATCH 485/695] format --- quartz/bootstrap-cli.mjs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/quartz/bootstrap-cli.mjs b/quartz/bootstrap-cli.mjs index a39e2915..ee62a567 100755 --- a/quartz/bootstrap-cli.mjs +++ b/quartz/bootstrap-cli.mjs @@ -192,7 +192,10 @@ yargs(hideBin(process.argv)) await rmContentFolder() if (setupStrategy === "copy") { - await fs.promises.cp(originalFolder, contentFolder, { recursive: true, preserveTimestamps: true }) + await fs.promises.cp(originalFolder, contentFolder, { + recursive: true, + preserveTimestamps: true, + }) } else if (setupStrategy === "symlink") { await fs.promises.symlink(originalFolder, contentFolder, "dir") } From 6f1f820289ce37d328c4bc8cceba1f702df52e15 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Thu, 17 Aug 2023 23:39:15 -0700 Subject: [PATCH 486/695] fix typo in docs --- content/upgrading.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/upgrading.md b/content/upgrading.md index abe916c6..a4c2d4a9 100644 --- a/content/upgrading.md +++ b/content/upgrading.md @@ -8,7 +8,7 @@ title: "Upgrading Quartz" To fetch the latest Quartz updates, simply run ```bash -npx quartz upgrade +npx quartz update ``` As Quartz uses [git](https://git-scm.com/) under the hood for versioning, updating effectively 'pulls' in the updates from the official Quartz GitHub repository. If you have local changes that might conflict with the updates, you may need to resolve these manually yourself (or, pull manually using `git pull origin upstream`). From d8bec631b6dee8f5b9c42f75d154252e53e81b77 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Fri, 18 Aug 2023 18:22:38 -0700 Subject: [PATCH 487/695] update docs on github pages and syncing --- content/authoring content.md | 15 +++++++++++++++ content/hosting.md | 7 ++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/content/authoring content.md b/content/authoring content.md index 4e3c3c83..7aa8d629 100644 --- a/content/authoring content.md +++ b/content/authoring content.md @@ -31,3 +31,18 @@ Some common frontmatter fields that are natively supported by Quartz: - `aliases`: Other names for this note. This is a list of strings. - `draft`: Whether to publish the page or not. This is one way to make [[private pages|pages private]] in Quartz. - `date`: A string representing the day the note was published. Normally uses `YYYY-MM-DD` format. + +## Syncing your Content + +When you're Quartz is at a point you're happy with, you can save your changes to GitHub by doing `npx quartz sync`. + +> [!hint] Flags and options +> For full help options, you can run `npx quartz sync --help`. +> +> Most of these have sensible defaults but you can override them if you have a custom setup: +> +> - `-d` or `--directory`: the content folder. This is normally just `content` +> - `-v` or `--verbose`: print out extra logging information +> - `--commit` or `--no-commit`: whether to make a `git` commit for your changes +> - `--push` or `--no-push`: whether to push updates to your GitHub fork of Quartz +> - `--pull` or `--no-pull`: whether to try and pull in any updates from your GitHub fork (i.e. from other devices) before pushing diff --git a/content/hosting.md b/content/hosting.md index 1e900a5b..2251f918 100644 --- a/content/hosting.md +++ b/content/hosting.md @@ -53,7 +53,7 @@ jobs: build: runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: fetch-depth: 0 # Fetch all history for git info - uses: actions/setup-node@v3 @@ -85,6 +85,11 @@ Then: 1. Head to "Settings" tab of your forked repository and in the sidebar, click "Pages". Under "Source", select "GitHub Actions". 2. Commit these changes by doing `npx quartz sync`. This should deploy your site to `.github.io/`. +> [!hint] +> If you get an error about not being allowed to deploy to `github-pages` due to environment protection rules, make sure you remove any existing GitHub pages environments. +> +> You can do this by going to your Settings page on your GitHub fork and going to the Environments tab and pressing the trash icon. The GitHub action will recreate the environment for you correctly the next time you sync your Quartz. + ### Custom Domain Here's how to add a custom domain to your GitHub pages deployment. From 3201f83b70bb2ee1d1daeb585a26e8cd6b8ce95f Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Fri, 18 Aug 2023 18:24:09 -0700 Subject: [PATCH 488/695] v4-alpha -> v4 --- content/hosting.md | 4 ++-- content/index.md | 2 +- content/migrating from Quartz 3.md | 4 ++-- content/showcase.md | 2 +- quartz/bootstrap-cli.mjs | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/content/hosting.md b/content/hosting.md index 2251f918..b2476270 100644 --- a/content/hosting.md +++ b/content/hosting.md @@ -17,7 +17,7 @@ However, if you'd like to publish your site to the world, you need a way to host | Configuration option | Value | | ---------------------- | ------------------ | -| Production branch | `v4-alpha` | +| Production branch | `v4` | | Framework preset | `None` | | Build command | `npx quartz build` | | Build output directory | `public` | @@ -38,7 +38,7 @@ name: Deploy Quartz site to GitHub Pages on: push: branches: - - v4-alpha + - v4 permissions: contents: read diff --git a/content/index.md b/content/index.md index 45681516..2e643f22 100644 --- a/content/index.md +++ b/content/index.md @@ -13,7 +13,7 @@ Then, in your terminal of choice, enter the following commands line by line: ```shell git clone https://github.com/jackyzha0/quartz.git cd quartz -git checkout v4-alpha +git checkout v4 npm i npx quartz create ``` diff --git a/content/migrating from Quartz 3.md b/content/migrating from Quartz 3.md index f322e86f..4af4868d 100644 --- a/content/migrating from Quartz 3.md +++ b/content/migrating from Quartz 3.md @@ -5,8 +5,8 @@ title: "Migrating from Quartz 3" As you already have Quartz locally, you don't need to fork or clone it again. Simply just checkout the alpha branch, install the dependencies, and import your old vault. ```bash -git checkout v4-alpha -git pull upstream v4-alpha +git checkout v4 +git pull upstream v4 npm i npx quartz create ``` diff --git a/content/showcase.md b/content/showcase.md index e7748ba1..e87dc604 100644 --- a/content/showcase.md +++ b/content/showcase.md @@ -16,4 +16,4 @@ Want to see what Quartz can do? Here are some cool community gardens: - [Abhijeet's Math Wiki](https://abhmul.github.io/quartz/Math-Wiki/) - [Mike's AI Garden 🤖🪴](https://mwalton.me/) -If you want to see your own on here, submit a [Pull Request adding yourself to this file](https://github.com/jackyzha0/quartz/blob/v4-alpha/content/showcase.md)! +If you want to see your own on here, submit a [Pull Request adding yourself to this file](https://github.com/jackyzha0/quartz/blob/v4/content/showcase.md)! diff --git a/quartz/bootstrap-cli.mjs b/quartz/bootstrap-cli.mjs index ee62a567..643733f9 100755 --- a/quartz/bootstrap-cli.mjs +++ b/quartz/bootstrap-cli.mjs @@ -19,7 +19,7 @@ import { randomUUID } from "crypto" const ORIGIN_NAME = "origin" const UPSTREAM_NAME = "upstream" -const QUARTZ_SOURCE_BRANCH = "v4-alpha" +const QUARTZ_SOURCE_BRANCH = "v4" const cwd = process.cwd() const cacheDir = path.join(cwd, ".quartz-cache") const cacheFile = "./.quartz-cache/transpiled-build.mjs" From c874e7e9378a5ba895870e9680484fb4af5c6e93 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Sat, 19 Aug 2023 15:52:25 -0700 Subject: [PATCH 489/695] base path refactor to better support subpath hosting --- content/advanced/paths.md | 32 ++-- content/hosting.md | 2 +- index.d.ts | 2 +- package.json | 2 +- quartz/components/Backlinks.tsx | 6 +- quartz/components/Head.tsx | 5 +- quartz/components/PageList.tsx | 8 +- quartz/components/PageTitle.tsx | 5 +- quartz/components/TagList.tsx | 5 +- quartz/components/pages/FolderContent.tsx | 6 +- quartz/components/pages/TagContent.tsx | 4 +- quartz/components/renderPage.tsx | 19 +- quartz/components/scripts/graph.inline.ts | 34 ++-- quartz/components/scripts/search.inline.ts | 10 +- quartz/components/scripts/spa.inline.ts | 8 +- quartz/plugins/emitters/aliases.ts | 17 +- quartz/plugins/emitters/componentResources.ts | 8 +- quartz/plugins/emitters/contentIndex.ts | 30 ++- quartz/plugins/emitters/contentPage.tsx | 6 +- quartz/plugins/emitters/folderPage.tsx | 20 +- quartz/plugins/emitters/tagPage.tsx | 12 +- quartz/plugins/index.ts | 4 +- quartz/plugins/transformers/links.ts | 26 ++- quartz/plugins/transformers/ofm.ts | 5 +- quartz/plugins/types.ts | 4 +- quartz/util/ctx.ts | 4 +- quartz/util/path.test.ts | 179 +++++++----------- quartz/util/path.ts | 179 ++++++------------ quartz/worker.ts | 4 +- 29 files changed, 257 insertions(+), 389 deletions(-) diff --git a/content/advanced/paths.md b/content/advanced/paths.md index 68fc181b..9455b981 100644 --- a/content/advanced/paths.md +++ b/content/advanced/paths.md @@ -4,7 +4,7 @@ title: Paths in Quartz Paths are pretty complex to reason about because, especially for a static site generator, they can come from so many places. -The current browser URL? Technically a path. A full file path to a piece of content? Also a path. What about a slug for a piece of content? Yet another path. +A full file path to a piece of content? Also a path. What about a slug for a piece of content? Yet another path. It would be silly to type these all as `string` and call it a day as it's pretty common to accidentally mistake one type of path for another. Unfortunately, TypeScript does not have [nominal types](https://en.wikipedia.org/wiki/Nominal_type_system) for type aliases meaning even if you made custom types of a server-side slug or a client-slug slug, you can still accidentally assign one to another and TypeScript wouldn't catch it. @@ -12,13 +12,13 @@ Luckily, we can mimic nominal typing using [brands](https://www.typescriptlang.o ```typescript // instead of -type ClientSlug = string +type FullSlug = string // we do -type ClientSlug = string & { __brand: "client" } +type FullSlug = string & { __brand: "full" } // that way, the following will fail typechecking -const slug: ClientSlug = "some random slug" +const slug: FullSlug = "some random string" ``` While this prevents most typing mistakes _within_ our nominal typing system (e.g. mistaking a server slug for a client slug), it doesn't prevent us from _accidentally_ mistaking a string for a client slug when we forcibly cast it. @@ -29,27 +29,23 @@ The following diagram draws the relationships between all the path sources, nomi ```mermaid graph LR - Browser{{Browser}} --> Window{{Window}} & LinkElement{{Link Element}} - Window --"getCanonicalSlug()"--> Canonical[Canonical Slug] - Window --"getClientSlug()"--> Client[Client Slug] + Browser{{Browser}} --> Window{{Body}} & LinkElement{{Link Element}} + Window --"getFullSlug()"--> FullSlug[Full Slug] LinkElement --".href"--> Relative[Relative URL] - Client --"canonicalizeClient()"--> Canonical - Canonical --"pathToRoot()"--> Relative - Canonical --"resolveRelative()" --> Relative + FullSlug --"simplifySlug()" --> SimpleSlug[Simple Slug] + SimpleSlug --"pathToRoot()"--> Relative + SimpleSlug --"resolveRelative()" --> Relative MD{{Markdown File}} --> FilePath{{File Path}} & Links[Markdown links] Links --"transformLink()"--> Relative - FilePath --"slugifyFilePath()"--> Server[Server Slug] - Server --> HTML["HTML File"] - Server --"canonicalizeServer()"--> Canonical - style Canonical stroke-width:4px + FilePath --"slugifyFilePath()"--> FullSlug[Full Slug] + style FullSlug stroke-width:4px ``` Here are the main types of slugs with a rough description of each type of path: -- `ClientSlug`: client-side slug, usually obtained through `window.location`. Contains the protocol (i.e. starts with `https://`) -- `CanonicalSlug`: should be used whenever you need to refer to the location of a file/note. Shouldn't be a relative path and shouldn't have leading or trailing slashes `/` either. Also shouldn't have `/index` as an ending or a file extension. -- `RelativeURL`: must start with `.` or `..` to indicate it's a relative URL. Shouldn't have `/index` as an ending or a file extension. -- `ServerSlug`: cannot be relative and may not have leading or trailing slashes. - `FilePath`: a real file path to a file on disk. Cannot be relative and must have a file extension. +- `FullSlug`: cannot be relative and may not have leading or trailing slashes. It can have `index` as it's last segment. Use this wherever possible is it's the most 'general' interpretation of a slug. +- `SimpleSlug`: cannot be relative and shouldn't have `/index` as an ending or a file extension. It _can_ however have a trailing slash to indicate a folder path. +- `RelativeURL`: must start with `.` or `..` to indicate it's a relative URL. Shouldn't have `/index` as an ending or a file extension but can contain a trailing slash. To get a clearer picture of how these relate to each other, take a look at the path tests in `quartz/path.test.ts`. diff --git a/content/hosting.md b/content/hosting.md index b2476270..d6ccd0bd 100644 --- a/content/hosting.md +++ b/content/hosting.md @@ -17,7 +17,7 @@ However, if you'd like to publish your site to the world, you need a way to host | Configuration option | Value | | ---------------------- | ------------------ | -| Production branch | `v4` | +| Production branch | `v4` | | Framework preset | `None` | | Build command | `npx quartz build` | | Build output directory | `public` | diff --git a/index.d.ts b/index.d.ts index 4a93f164..aec536d2 100644 --- a/index.d.ts +++ b/index.d.ts @@ -5,7 +5,7 @@ declare module "*.scss" { // dom custom event interface CustomEventMap { - nav: CustomEvent<{ url: CanonicalSlug }> + nav: CustomEvent<{ url: FullSlug }> } declare const fetchData: Promise diff --git a/package.json b/package.json index 17e46b06..08ab2d60 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "@jackyzha0/quartz", "description": "🌱 publish your digital garden and notes as a website", "private": true, - "version": "4.0.7", + "version": "4.0.8", "type": "module", "author": "jackyzha0 ", "license": "MIT", diff --git a/quartz/components/Backlinks.tsx b/quartz/components/Backlinks.tsx index 8cf3afa2..e88966b1 100644 --- a/quartz/components/Backlinks.tsx +++ b/quartz/components/Backlinks.tsx @@ -1,9 +1,9 @@ import { QuartzComponentConstructor, QuartzComponentProps } from "./types" import style from "./styles/backlinks.scss" -import { canonicalizeServer, resolveRelative } from "../util/path" +import { resolveRelative, simplifySlug } from "../util/path" function Backlinks({ fileData, allFiles }: QuartzComponentProps) { - const slug = canonicalizeServer(fileData.slug!) + const slug = simplifySlug(fileData.slug!) const backlinkFiles = allFiles.filter((file) => file.links?.includes(slug)) return ( diff --git a/quartz/components/ExplorerNode.tsx b/quartz/components/ExplorerNode.tsx index fd0c0823..c55a7a0a 100644 --- a/quartz/components/ExplorerNode.tsx +++ b/quartz/components/ExplorerNode.tsx @@ -145,7 +145,7 @@ export function ExplorerNode({ node, opts, fullPath, fileData }: ExplorerNodePro } return ( -
    +
  • {node.file ? ( // Single file node
  • @@ -174,17 +174,17 @@ export function ExplorerNode({ node, opts, fullPath, fileData }: ExplorerNodePro {/* render tag if folderBehavior is "link", otherwise render )} -
  • +
    )} {/* Recursively render children of folder */} @@ -210,6 +210,6 @@ export function ExplorerNode({ node, opts, fullPath, fileData }: ExplorerNodePro
    )} - + ) } diff --git a/quartz/components/scripts/explorer.inline.ts b/quartz/components/scripts/explorer.inline.ts index 2b7df7d3..9fe18654 100644 --- a/quartz/components/scripts/explorer.inline.ts +++ b/quartz/components/scripts/explorer.inline.ts @@ -113,9 +113,11 @@ function setupExplorer() { ) as HTMLElement // Get corresponding content
      tag and set state - const folderUL = folderLi.parentElement?.nextElementSibling - if (folderUL) { - setFolderState(folderUL as HTMLElement, folderUl.collapsed) + if (folderLi) { + const folderUL = folderLi.parentElement?.nextElementSibling + if (folderUL) { + setFolderState(folderUL as HTMLElement, folderUl.collapsed) + } } }) } else { diff --git a/quartz/components/styles/explorer.scss b/quartz/components/styles/explorer.scss index 776a5ae6..955c269a 100644 --- a/quartz/components/styles/explorer.scss +++ b/quartz/components/styles/explorer.scss @@ -1,4 +1,5 @@ button#explorer { + all: unset; background-color: transparent; border: none; text-align: left; @@ -8,7 +9,7 @@ button#explorer { display: flex; align-items: center; - & h3 { + & h1 { font-size: 1rem; display: inline-block; margin: 0; @@ -58,7 +59,7 @@ button#explorer { max-height 0.35s ease, transform 0.35s ease, opacity 0.2s ease; - & div > li > a { + & li > a { color: var(--dark); opacity: 0.75; pointer-events: all; @@ -92,7 +93,7 @@ svg { color: var(--tertiary) !important; } - & li > button { + & div > button { color: var(--dark); background-color: transparent; border: none; @@ -103,7 +104,7 @@ svg { display: flex; align-items: center; - & h3 { + & p { font-size: 0.95rem; display: inline-block; color: var(--secondary); @@ -138,5 +139,7 @@ div:has(> .folder-outer:not(.open)) > .folder-container > svg { #explorer-end { // needs height so IntersectionObserver gets triggered - height: 1px; + height: 4px; + // remove default margin from li + margin: 0; } From 16d33fb77193710bede887d6a177d2144b78fb67 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Wed, 20 Sep 2023 16:08:54 -0700 Subject: [PATCH 629/695] feat: display name for folders, expand explorer a little bit (#489) * feat: display name for folders, expand explorer a little bit * update docs --- docs/advanced/index.md | 3 +++ docs/features/explorer.md | 13 +++++++------ quartz/components/Explorer.tsx | 5 +++-- quartz/components/ExplorerNode.tsx | 14 ++++++++++---- quartz/styles/base.scss | 2 +- 5 files changed, 24 insertions(+), 13 deletions(-) create mode 100644 docs/advanced/index.md diff --git a/docs/advanced/index.md b/docs/advanced/index.md new file mode 100644 index 00000000..48225890 --- /dev/null +++ b/docs/advanced/index.md @@ -0,0 +1,3 @@ +--- +title: "Advanced" +--- diff --git a/docs/features/explorer.md b/docs/features/explorer.md index 6f941b87..b0eb12d8 100644 --- a/docs/features/explorer.md +++ b/docs/features/explorer.md @@ -57,7 +57,8 @@ All functions you can pass work with the `FileNode` class, which has the followi ```ts title="quartz/components/ExplorerNode.tsx" {2-5} export class FileNode { children: FileNode[] // children of current node - name: string // name of node (only useful for folders) + name: string // last part of slug + displayName: string // what actually should be displayed in the explorer file: QuartzPluginData | null // set if node is a file, see `QuartzPluginData` for more detail depth: number // depth of current node @@ -72,7 +73,7 @@ Every function you can pass is optional. By default, only a `sort` function will Component.Explorer({ sortFn: (a, b) => { if ((!a.file && !b.file) || (a.file && b.file)) { - return a.name.localeCompare(b.name) + return a.displayName.localeCompare(b.displayName) } if (a.file && !b.file) { return 1 @@ -120,7 +121,7 @@ Using this example, the explorer will alphabetically sort everything, but put al Component.Explorer({ sortFn: (a, b) => { if ((!a.file && !b.file) || (a.file && b.file)) { - return a.name.localeCompare(b.name) + return a.displayName.localeCompare(b.displayName) } if (a.file && !b.file) { return -1 @@ -138,7 +139,7 @@ Using this example, the display names of all `FileNodes` (folders + files) will ```ts title="quartz.layout.ts" Component.Explorer({ mapFn: (node) => { - node.name = node.name.toUpperCase() + node.displayName = node.displayName.toUpperCase() }, }) ``` @@ -172,9 +173,9 @@ Component.Explorer({ if (node.depth > 0) { // set emoji for file/folder if (node.file) { - node.name = "📄 " + node.name + node.displayName = "📄 " + node.displayName } else { - node.name = "📠" + node.name + node.displayName = "📠" + node.displayName } } }, diff --git a/quartz/components/Explorer.tsx b/quartz/components/Explorer.tsx index bc4855ed..73c620f3 100644 --- a/quartz/components/Explorer.tsx +++ b/quartz/components/Explorer.tsx @@ -11,10 +11,10 @@ const defaultOptions = { folderClickBehavior: "collapse", folderDefaultState: "collapsed", useSavedState: true, - // Sort order: folders first, then files. Sort folders and files alphabetically sortFn: (a, b) => { + // Sort order: folders first, then files. Sort folders and files alphabetically if ((!a.file && !b.file) || (a.file && b.file)) { - return a.name.localeCompare(b.name) + return a.displayName.localeCompare(b.displayName) } if (a.file && !b.file) { return 1 @@ -22,6 +22,7 @@ const defaultOptions = { return -1 } }, + filterFn: (node) => node.name !== "tags", order: ["filter", "map", "sort"], } satisfies Options diff --git a/quartz/components/ExplorerNode.tsx b/quartz/components/ExplorerNode.tsx index c55a7a0a..9bdd0dfc 100644 --- a/quartz/components/ExplorerNode.tsx +++ b/quartz/components/ExplorerNode.tsx @@ -29,19 +29,25 @@ export type FolderState = { export class FileNode { children: FileNode[] name: string + displayName: string file: QuartzPluginData | null depth: number constructor(name: string, file?: QuartzPluginData, depth?: number) { this.children = [] this.name = name + this.displayName = name this.file = file ? structuredClone(file) : null this.depth = depth ?? 0 } private insert(file: DataWrapper) { if (file.path.length === 1) { - this.children.push(new FileNode(file.file.frontmatter!.title, file.file, this.depth + 1)) + if (file.path[0] !== "index.md") { + this.children.push(new FileNode(file.file.frontmatter!.title, file.file, this.depth + 1)) + } else { + this.displayName = file.file.frontmatter!.title + } } else { const next = file.path[0] file.path = file.path.splice(1) @@ -150,7 +156,7 @@ export function ExplorerNode({ node, opts, fullPath, fileData }: ExplorerNodePro // Single file node
    • - {node.name} + {node.displayName}
    • ) : ( @@ -177,11 +183,11 @@ export function ExplorerNode({ node, opts, fullPath, fileData }: ExplorerNodePro
      {folderBehavior === "link" ? ( - {node.name} + {node.displayName} ) : ( )}
      diff --git a/quartz/styles/base.scss b/quartz/styles/base.scss index c6925fbe..9d553622 100644 --- a/quartz/styles/base.scss +++ b/quartz/styles/base.scss @@ -446,7 +446,7 @@ video { ul.overflow, ol.overflow { - max-height: 300; + max-height: 400; overflow-y: auto; // clearfix From 48452231d5fcd14ef218928bde9ae7e5bc745f4a Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Wed, 20 Sep 2023 16:09:18 -0700 Subject: [PATCH 630/695] perf: memoize filetree computation (#490) * perf: memoize filetree computation * format * var -> let --- quartz/components/Explorer.tsx | 80 +++++++++++++++++++--------------- 1 file changed, 45 insertions(+), 35 deletions(-) diff --git a/quartz/components/Explorer.tsx b/quartz/components/Explorer.tsx index 73c620f3..de6b5e0a 100644 --- a/quartz/components/Explorer.tsx +++ b/quartz/components/Explorer.tsx @@ -4,6 +4,7 @@ import explorerStyle from "./styles/explorer.scss" // @ts-ignore import script from "./scripts/explorer.inline" import { ExplorerNode, FileNode, Options } from "./ExplorerNode" +import { QuartzPluginData } from "../plugins/vfile" // Options interface defined in `ExplorerNode` to avoid circular dependency const defaultOptions = { @@ -27,49 +28,58 @@ const defaultOptions = { } satisfies Options export default ((userOpts?: Partial) => { - function Explorer({ allFiles, displayClass, fileData }: QuartzComponentProps) { - // Parse config - const opts: Options = { ...defaultOptions, ...userOpts } + // Parse config + const opts: Options = { ...defaultOptions, ...userOpts } - // Construct tree from allFiles - const fileTree = new FileNode("") - allFiles.forEach((file) => fileTree.add(file, 1)) + // memoized + let fileTree: FileNode + let jsonTree: string - /** - * Keys of this object must match corresponding function name of `FileNode`, - * while values must be the argument that will be passed to the function. - * - * e.g. entry for FileNode.sort: `sort: opts.sortFn` (value is sort function from options) - */ - const functions = { - map: opts.mapFn, - sort: opts.sortFn, - filter: opts.filterFn, - } + function constructFileTree(allFiles: QuartzPluginData[]) { + if (!fileTree) { + // Construct tree from allFiles + fileTree = new FileNode("") + allFiles.forEach((file) => fileTree.add(file, 1)) - // Execute all functions (sort, filter, map) that were provided (if none were provided, only default "sort" is applied) - if (opts.order) { - // Order is important, use loop with index instead of order.map() - for (let i = 0; i < opts.order.length; i++) { - const functionName = opts.order[i] - if (functions[functionName]) { - // for every entry in order, call matching function in FileNode and pass matching argument - // e.g. i = 0; functionName = "filter" - // converted to: (if opts.filterFn) => fileTree.filter(opts.filterFn) + /** + * Keys of this object must match corresponding function name of `FileNode`, + * while values must be the argument that will be passed to the function. + * + * e.g. entry for FileNode.sort: `sort: opts.sortFn` (value is sort function from options) + */ + const functions = { + map: opts.mapFn, + sort: opts.sortFn, + filter: opts.filterFn, + } - // @ts-ignore - // typescript cant statically check these dynamic references, so manually make sure reference is valid and ignore warning - fileTree[functionName].call(fileTree, functions[functionName]) + // Execute all functions (sort, filter, map) that were provided (if none were provided, only default "sort" is applied) + if (opts.order) { + // Order is important, use loop with index instead of order.map() + for (let i = 0; i < opts.order.length; i++) { + const functionName = opts.order[i] + if (functions[functionName]) { + // for every entry in order, call matching function in FileNode and pass matching argument + // e.g. i = 0; functionName = "filter" + // converted to: (if opts.filterFn) => fileTree.filter(opts.filterFn) + + // @ts-ignore + // typescript cant statically check these dynamic references, so manually make sure reference is valid and ignore warning + fileTree[functionName].call(fileTree, functions[functionName]) + } } } + + // Get all folders of tree. Initialize with collapsed state + const folders = fileTree.getFolderPaths(opts.folderDefaultState === "collapsed") + + // Stringify to pass json tree as data attribute ([data-tree]) + jsonTree = JSON.stringify(folders) } + } - // Get all folders of tree. Initialize with collapsed state - const folders = fileTree.getFolderPaths(opts.folderDefaultState === "collapsed") - - // Stringify to pass json tree as data attribute ([data-tree]) - const jsonTree = JSON.stringify(folders) - + function Explorer({ allFiles, displayClass, fileData }: QuartzComponentProps) { + constructFileTree(allFiles) return (