docsifyjs / docsify

🃏 A magical documentation site generator.
https://docsify.js.org
MIT License
27.42k stars 5.67k forks source link

Support GitHub style admonitions / alerts / callouts #2486

Open jhildenbiddle opened 1 month ago

jhildenbiddle commented 1 month ago

Feature request

Support GFM admonitions / callouts.

Problem or desire

GitHub recently added supports for markdown admonitions / callouts. Docsify should add support for this format so that these elements are rendered as expected in both GitHub and Docsify environments.

GitHub Markdown:

> [!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.

GitHub Output:

[!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.

Proposal

  1. Render GFM admonitions. Styles do not need to match GFM styles.
  2. Consider deprecating current ?> and !> style helpers in favor of GFM-style blockquote helpers. This will address long-standing issues with multi-line helpers (e.g. #483 and #1588) and poor rendering of these helpers when rendering Markdown outside of Docsify (e.g. GitHub).

Implementation

Koooooo-7 commented 1 month ago

Nice and pretty styling solution.

FYI: Add and override the blockquote parser in docsify by marked v13+.

export const blockquoteCompiler = ({ renderer }) =>
  (renderer.blockquote = function ({ tokens }) {
    const body = this.parser.parse(tokens);
    // we could add the GFM admonitions / callouts support here.
    return `<blockquote>${body}</blockquote>`;
  });