1315 words
7 minutes
Fuwari Static Web Markdown Navigation
2020-08-28
moments

This blog template is built with Astro. For the things that are not mentioned in this guide, you may find the answers in the Astro Docs.

Front-matter of Posts#

---
title: My First Blog Post
published: 2020-08-28
description: This is the first post of my new Astro blog.
image: ./cover.jpg
tags: [Foo, Bar]
category: Front-end
draft: false
---
AttributeDescription
titleThe title of the post.
publishedThe date the post was published.
updatedThe date the post was last updated.
descriptionA short description of the post. Displayed on index page.
imageThe cover image path of the post.
1. Start with http:// or https://: Use web image
2. Start with /: For image in public dir
3. With none of the prefixes: Relative to the markdown file
tagsThe tags of the post.
categoryThe category of the post.
draftIf this post is still a draft, which won’t be displayed.

Where to Place the Post Files#

Your post files should be placed in src/content/posts/ directory. You can also create sub-directories to better organize your posts and assets.

src/content/posts/
├── post-1.md
└── post-2/
├── cover.png
└── index.md

Basic Markdown Syntax#

Headers#

H1 Header#

H2 Header#

H3 Header#

H4 Header#

H5 Header#
H6 Header#

Text Formatting#

  • Italic text
  • Bold text
  • Bold and italic text
  • Strikethrough
  • Inline code
  • Link to example
  • ![Image alt text](/path/to/image.jpg) (Example image path)

Lists#

Unordered list:

  • Item 1
  • Item 2
    • Subitem 1
    • Subitem 2

Ordered list:

  1. First item
  2. Second item
    1. Subitem 1
    2. Subitem 2

Blockquotes#

This is a blockquote.

It can span multiple lines.

Code Blocks#

// This is a code block with syntax highlighting
#[instrument(skip_all, name = "trace_start_server")]
fn main() -> Result<(), ServerError> {
let rt = match compio::runtime::Runtime::new() {
Ok(rt) => rt,
Err(e) => {
match e.kind() {
std::io::ErrorKind::OutOfMemory => print_locked_memory_limit_info(),
std::io::ErrorKind::PermissionDenied => print_io_uring_permission_info(),
_ => {}
}
panic!("Cannot create runtime: {e}");
}
};
}
// Code block without syntax highlighting
console.log("Hello, world!");

Tables#

Column 1Column 2Column 3
Cell 1Cell 2Cell 3
Cell 4Cell 5Cell 6

Horizontal Rule#


Footnotes#

This is a footnote reference1.

Extended Markdown Features#

GitHub Repository Cards#

You can add dynamic cards that link to GitHub repositories. On page load, the repository information is pulled from the GitHub API.

saicaca
/
fuwari
Waiting for api.github.com...
00K
0K
0K
Waiting...

Create a GitHub repository card with the code ::github{repo="<owner>/<repository>"}.

Admonitions#

Following types of admonitions are supported: note tip important warning caution

NOTE

Highlights information that users should take into account, even when skimming.

TIP

Optional information to help a user be more successful.

IMPORTANT

Crucial information necessary for users to succeed.

WARNING

Critical content demanding immediate user attention due to potential risks.

CAUTION

Negative potential consequences of an action.

Custom Titles#

The title of the admonition can be customized.

MY CUSTOM TITLE

This is a note with a custom title.

Basic syntax:

:::note
Highlights information that users should take into account, even when skimming.
:::
:::tip[Custom Title]
This is a tip with a custom title.
:::

GitHub Syntax#

NOTE

The GitHub syntax is also supported.

> [!NOTE]
> The GitHub syntax is also supported.
> [!TIP]
> The GitHub syntax is also supported.

Spoilers#

You can add spoilers to your text. The text also supports Markdown syntax.

The content is hidden ayyy!

The content :spoiler[is hidden **ayyy**]!

Embedding Media#

Videos#

You can embed videos from various platforms like YouTube or Bilibili by copying and pasting the embed code:

YouTube#

Draft Posts#

You can mark posts as drafts by setting draft: true in the frontmatter. Draft posts will not be visible to visitors but can be previewed during development.

When the article is ready for publication, update the “draft” field to “false” in the Frontmatter:

---
title: Draft Example
published: 2024-01-11T04:40:26.381Z
tags: [Markdown, Blogging, Demo]
category: Examples
draft: false
---

Here, we’ll explore how code blocks look using Expressive Code. The provided examples are based on the official documentation, which you can refer to for further details.

Expressive Code#

Syntax Highlighting#

Syntax Highlighting

Regular syntax highlighting#

console.log('This code is syntax highlighted!')

Rendering ANSI escape sequences#

Terminal window
ANSI colors:
- Regular: Red Green Yellow Blue Magenta Cyan
- Bold: Red Green Yellow Blue Magenta Cyan
- Dimmed: Red Green Yellow Blue Magenta Cyan
256 colors (showing colors 160-177):
160 161 162 163 164 165
166 167 168 169 170 171
172 173 174 175 176 177
Full RGB colors:
ForestGreen - RGB(34, 139, 34)
Text formatting: Bold Dimmed Italic Underline

Editor & Terminal Frames#

Editor & Terminal Frames

Code editor frames#

my-test-file.js
console.log('Title attribute example')

src/content/index.html
<div>File name comment example</div>

Terminal frames#

Terminal window
echo "This terminal frame has no title"

PowerShell terminal example
Write-Output "This one has a title!"

Overriding frame types#

echo "Look ma, no frame!"

PowerShell Profile.ps1
# Without overriding, this would be a terminal frame
function Watch-Tail { Get-Content -Tail 20 -Wait $args }
New-Alias tail Watch-Tail

Text & Line Markers#

Text & Line Markers

Marking full lines & line ranges#

// Line 1 - targeted by line number
// Line 2
// Line 3
// Line 4 - targeted by line number
// Line 5
// Line 6
// Line 7 - targeted by range "7-8"
// Line 8 - targeted by range "7-8"

Selecting line marker types (mark, ins, del)#

line-markers.js
function demo() {
console.log('this line is marked as deleted')
// This line and the next one are marked as inserted
console.log('this is the second inserted line')
return 'this line uses the neutral default marker type'
}

Adding labels to line markers#

labeled-line-markers.jsx
<button
role="button"
{...props}
value={value}
className={buttonClassName}
disabled={disabled}
active={active}
>
{children &&
!active &&
(typeof children === 'string' ? <span>{children}</span> : children)}
</button>

Adding long labels on their own lines#

labeled-line-markers.jsx
<button
role="button"
{...props}
value={value}
className={buttonClassName}
disabled={disabled}
active={active}
>
{children &&
!active &&
(typeof children === 'string' ? <span>{children}</span> : children)}
</button>

Using diff-like syntax#

this line will be marked as inserted
this line will be marked as deleted
this is a regular line

--- a/README.md
+++ b/README.md
@@ -1,3 +1,4 @@
+this is an actual diff file
-all contents will remain unmodified
no whitespace will be removed either

Combining syntax highlighting with diff-like syntax#

function thisIsJavaScript() {
// This entire block gets highlighted as JavaScript,
// and we can still add diff markers to it!
console.log('Old code to be removed')
console.log('New and shiny code!')
}

Marking individual text inside lines#

function demo() {
// Mark any given text inside lines
return 'Multiple matches of the given text are supported';
}

Regular expressions#

console.log('The words yes and yep will be marked.')

Escaping forward slashes#

Terminal window
echo "Test" > /home/test.txt

Selecting inline marker types (mark, ins, del)#

function demo() {
console.log('These are inserted and deleted marker types');
// The return statement uses the default marker type
return true;
}

Word Wrap#

Word Wrap

Configuring word wrap per block#

// Example with wrap
function getLongString() {
return 'This is a very long string that will most probably not fit into the available space unless the container is extremely wide'
}

// Example with wrap=false
function getLongString() {
return 'This is a very long string that will most probably not fit into the available space unless the container is extremely wide'
}

Configuring indentation of wrapped lines#

// Example with preserveIndent (enabled by default)
function getLongString() {
return 'This is a very long string that will most probably not fit into the available space unless the container is extremely wide'
}

// Example with preserveIndent=false
function getLongString() {
return 'This is a very long string that will most probably not fit into the available space unless the container is extremely wide'
}

Collapsible Sections#

Collapsible Sections

5 collapsed lines
// All this boilerplate setup code will be collapsed
import { someBoilerplateEngine } from '@example/some-boilerplate'
import { evenMoreBoilerplate } from '@example/even-more-boilerplate'
const engine = someBoilerplateEngine(evenMoreBoilerplate())
// This part of the code will be visible by default
engine.doSomething(1, 2, 3, calcFn)
function calcFn() {
// You can have multiple collapsed sections
3 collapsed lines
const a = 1
const b = 2
const c = a + b
// This will remain visible
console.log(`Calculation result: ${a} + ${b} = ${c}`)
return c
}
4 collapsed lines
// All this code until the end of the block will be collapsed again
engine.closeConnection()
engine.freeMemory()
engine.shutdown({ reason: 'End of example boilerplate code' })

Line Numbers#

Line Numbers

Displaying line numbers per block#

// This code block will show line numbers
console.log('Greetings from line 2!')
console.log('I am on line 3')

// Line numbers are disabled for this block
console.log('Hello?')
console.log('Sorry, do you know what line I am on?')

Changing the starting line number#

console.log('Greetings from line 5!')
console.log('I am on line 6')

Inline math equations go in like so: ω=dϕ/dt\omega = d\phi / dt. Display math should get its own line and be put in in double-dollarsigns:

I=ρR2dVI = \int \rho R^{2} dV

π=3.1415926535  8979323846  2643383279  5028841971  6939937510  5820974944  5923078164  0628620899  8628034825  3421170679  \begin{equation*} \pi =3.1415926535 \;8979323846\;2643383279\;5028841971\;6939937510\;5820974944 \;5923078164\;0628620899\;8628034825\;3421170679\;\ldots \end{equation*}

And note that you can backslash-escape any punctuation characters which you wish to be displayed literally, ex.: `foo`, *bar*, etc.

Footnotes#

  1. This is the footnote content.

Fuwari Static Web Markdown Navigation
https://svecco.org/posts/fuwari-template/
Author
Svecco
Published at
2020-08-28
License
CC BY-NC-SA 4.0