raffaelj/cockpit-bettermarkdown

Cockpit CMS v1 的 markdown 转换缓存、任务列表和目录支持

安装: 11

依赖: 0

建议者: 0

安全: 0

星标: 0

关注者: 2

分支: 0

开放问题: 1

类型:cockpit-module

0.2.0 2023-01-21 16:22 UTC

This package is auto-updated.

Last update: 2024-09-21 20:12:58 UTC


README

此插件与 Cockpit CMS v2 不兼容。

另请参阅 Cockpit CMS v1 文档Cockpit CMS v1 仓库 以及 Cockpit CMS v2 文档Cockpit CMS v2 仓库

Cockpit CMS 的 markdown 转换缓存、任务列表和目录支持

此插件替换了当前的 ParsedownParsedownExtra 库的最新版本,并添加了两个 Parsedown 扩展:ParsedownToCParsedownTasks

它还使用已转换内容的缓存来加快速度。缓存文件位于 tmp 文件夹中。

安装

将此存储库复制到 /addons 并命名为 BetterMarkdown 或使用 cli。

通过 git

cd path/to/cockpit
git clone https://github.com/raffaelj/cockpit_BetterMarkdown.git addons/BetterMarkdown

通过 cp 命令行界面

cd path/to/cockpit
./cp install/addon --name BetterMarkdown --url https://github.com/raffaelj/cockpit_BetterMarkdown/archive/master.zip

通过 composer

确保在项目的 composer.json 文件中定义了 cockpit 插件的路径。

{
    "name": "my/cockpit-project",
    "extra": {
        "installer-paths": {
            "addons/{$name}": ["type:cockpit-module"]
        }
    }
}
cd path/to/cockpit-root
composer create-project --ignore-platform-reqs aheinze/cockpit .
composer config extra.installer-paths.addons/{\$name} "type:cockpit-module"

composer require --ignore-platform-reqs raffaelj/cockpit-bettermarkdown

配置

path/to/cockpit/config/config.php:

<?php
return [
    'app.name' => 'markdown test',

    'bettermarkdown' => [
        'parser' => 'extended', // (string) parsedown|extra|extended - default: extended
        'cache' => false, // cache is still active, but rebuild is forced --> useful for debugging

        // change settings for ParsedownToC
        // see: https://github.com/BenjaminHoegh/parsedownToc#configuration
        'toc' => [ 
            'selectors' => ['h2', 'h3', 'h4', 'h5', 'h6'], // omit h1 from toc

            // blacklist existing ids in your frontend
            'blacklist' => [
                'nav', // turns to 'nav-1'
                'top',
            ],

            // array of regexes for text replacements - before heading ids are generated
            'replacements' => [ 
                '/^old-id$/' => 'new-id',
            ],
        ],

        'cached_toc_format' => 'tree', // (string) flat|tree - default: flat

        // transform the cached toc in tree format with cleaner output
        'tree_toc' => [
            'replace_keys' => [
                'text' => 'title',
            ],
            'unset_keys' => ['level', 'id'],
        ],

        // add classes to task lists
        'tasks' => [
            'classUnchecked' => 'parsedown-task-list parsedown-task-list-open',
            'classChecked'   => 'parsedown-task-list parsedown-task-list-close',
        ],
    ],
];

使用方法

Markdown

# Markdown Test

[toc]

## Usage

do something

## To do

* [x] test
* [ ] deploy

转换

$html = $app->module('cockpit')->markdown($md);

html 输出

<h1 id="markdown-test">Markdown Test</h1>
<div id="toc"><ul>
<li><a href="#usage">Usage</a></li>
<li><a href="#to-do">To do</a></li>
</ul></div>
<h2 id="usage">Usage</h2>
<p>do something</p>
<h2 id="to-do">To do</h2>
<ul>
<li class="parsedown-task-list parsedown-task-list-close">
<input type="checkbox" checked disabled /> test
</li>
<li class="parsedown-task-list parsedown-task-list-open">
<input type="checkbox" disabled /> deploy
</li>
</ul>

缓存

在转换一些 markdown 之后,tmp 文件夹中会添加两个文件。

  • {$hash}.md.html
  • {$hash}.md.toc.json
$html = $app->module('cockpit')->markdown($md);

$hash = md5($md);

$cachepath = "tmp:///{$hash}.md.toc.json";

if ($app->filestorage->has($cachepath)) {
    $toc = \json_decode($app->filestorage->read($cachepath), true);
}

print_r($toc);

许可证、致谢和第三方资源

许可证:MIT,作者:Raffael Jesche,www.rlj.me

使用的库

  • "erusev/parsedown-extra": "0.8.1", MIT
  • "erusev/parsedown": "^1.7.4", MIT
  • "benjaminhoegh/parsedown-toc": "^1.4.3", MIT
  • "raffaelj/parsedown-tasks": "^0.1.0", MIT