在ASP.NET Web窗体中使用CKEditor 5(带代码块)和Highlight.js

目录

介绍

CKEditor 5

highlight.js——语法突出显示

显示语言类型和“复制”按钮

Highlight.js渲染的一些截图:


介绍

CKEditor是一个HTML编辑器。highlight.js是一个语法突出显示工具。本文将在ASP.NET中介绍两者的实现。

CKEditor 5

首先从他们的网站下载:CKEditor 5

需要code blocks插件。包含它的最简单方法是创建和下载自定义构建或者,您可以单独下载code blocks插件,稍后在HTML页面中初始化编辑器时添加它。

使用CKEditor 5非常容易。下载后,提取单个文件 ckeditor.js并将其包含在项目解决方案中。等等,等等,只有一个文件?是的,这就是开始使用CKEditor 5所需的全部内容。这比设置CKEditor 4更容易。是的。

 ASP.NET/HTML 页面上,添加一个textarea元素:

<textarea class="editor"></textarea>

ASP.NET输入控件:

<asp:TextBox ID="txtEditor" runat="server" TextMode="MultiLine" CssClass="editor"
ValidateRequestMode="Disabled"></asp:TextBox>

请记住应用ValidateRequestMode="Disabled"属性,否则将不允许将HTML内容发送回服务器。出于安全考虑,默认情况下ASP.NET服务器会阻止用户输入HTML内容。

忘记样式文本区域,CKEditor 5不会应用它。

使用CSS设置CKEditor 5的高度:

.ck-source-editing-area,
.ck-editor__editable {
    min-height: 400px;
}

.ck-editor__main {
    height: 400px;
    overflow-y: scroll;
    border: 1px solid #bbbbbb;
}

接下来,包括JavaScript源文件 ckeditor.js并将初始化代码放在文本区域下方:

<asp:TextBox ID="txtEditor" runat="server" TextMode="MultiLine"
    CssClass="editor" ValidateRequestMode="Disabled"></asp:TextBox>

<script src="/CKEditor5/ckeditor.js"></script>
<script>
    ClassicEditor
        .create(document.querySelector('.editor'), {
            licenseKey: '',
            toolbar: {
                shouldNotGroupWhenFull: true
            },
        });
</script>

做!就这样。

单击代码块图标以插入代码。

为了添加所需的编程语言,您可以在编辑器初始化期间添加它。此外,通过按键盘上的[Tab]将触发代码缩进。默认缩进是通过插入/t,表示tab,这可能不是某些编程环境的常见做法。您可以将codeBlock.indentSequence上所需的缩进设置为 4个空格(例如),如下所示:

<script>

    ClassicEditor
        .create(document.querySelector('.editor'), {

            licenseKey: '',

            toolbar: {
                shouldNotGroupWhenFull: true
            },

            codeBlock: {
                languages: [
                    { language: "plaintext", label: "Plain text" },
                    { language: "html", label: "HTML" },
                    { language: "css", label: "CSS" },
                    { language: "javascript", label: "JavaScript" },
                    { language: "cs", label: "C#" },
                    { language: "sql", label: "SQL" },
                    { language: "json", label: "JSON" },
                    { language: "c", label: "C" },
                    { language: "cpp", label: "C++" },
                    { language: "diff", label: "Diff" },
                    { language: "java", label: "Java" },
                    { language: "php", label: "PHP" },
                    { language: "python", label: "Python" },
                    { language: "ruby", label: "Ruby" },
                    { language: "typescript", label: "TypeScript" },
                    { language: "xml", label: "XML" }
                ],
                indentSequence: "    "
            }

        });
</script>

在代码隐藏处,可以像这样获得输出:

string output = txtEditor.Text

输入示例:

输出示例:

输出文本可以加载到另一个页面中,例如:

highlight.js——语法突出显示

默认情况下,CKEditor 5code blocks插件不包含实时语法突出显示。

因此,我们可以使用 Highlight.js(一个JavaScript语法突出显示工具)来突出显示CKEditor生成的输出文本。

下载Highlight.js

提取以下文件并将其添加到项目中:

  • highlight.min.js(仅限单个文件)
  • 您喜欢的CSS主题文件(单个文件,位于“styles”文件夹中)

您的代码将如下所示:

<link href="/highlight.js/styles/vs2015.min.css" rel="stylesheet" />
<script src="/highlight.js/highlight.min.js"></script>
<script>hljs.highlightAll();</script>

就这样。

显示语言类型和复制按钮

示例(在右上角):

可以安装一个名为HighlightJs Copy Badge的插件来启用此功能。由Rick Strahl撰写。

默认情况下,此插件使用来自字体真棒复制图标。但是,您可以使用任何图像覆盖此设置。下面显示了使用此复制徽章的最简单默认设置。

包括以下CSS链接以导入字体真棒:

<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"
 rel="stylesheet" />

包括从Rick Strahl github站点获取的以下javascript文件:

<script src="highlightjs-badge.min.js"></script>

执行代码。这个插件必须在“highlight.js”之后运行,因此,我们可以使用计时器来延迟执行:

// wait for the page to fully loaded
window.onload = new function () {

    // set a timer to delay the execution
    setTimeout(function () {
        window.highlightJsBadge();
    }, 100);
}

就是这样。

语言类型和复制按钮块的样式可以用以下css覆盖:

/* The "copy" box container */
.code-badge {

}

/* The "copy" button */
.code-badge-copy-icon {

}

/* The "copy" button, after clicked */
.text-success {

}

/* The text in the container */
.code-badge-language {

}

/* The "copy" box container, at mouse hover */
.code-badge:hover {

}

/* The text in the container, at mouse hover */
.code-badge:hover .code-badge-language {

}

样式覆盖示例:

/* The "copy" box container */
.code-badge {
    background: #555 !important;
    padding: 8px !important;
    opacity: 0.5 !important;
    transition: opacity linear 0.5s !important;
}

/* The "copy" button */
.code-badge-copy-icon {
    font-size: 1.3em !important;
}

/* The "copy" button, after clicked */
.text-success {
    color: #b6ff00;
}

/* The text in the container */
.code-badge-language {
    margin-right: 10px;
    font-weight: 700 !important;
    color: #ffafaf !important;
    transition: color linear 0.5s !important;
}

/* The "copy" box container, at mouse hover */
.code-badge:hover {
    opacity: 1 !important;
    background: #4f4f4f !important;
}

/* The text in the container, at mouse hover */
.code-badge:hover .code-badge-language {
    color: #ff4343 !important;
}

Highlight.js渲染的一些截图:

更多渲染示例,请访问[现场演示]

https://www.codeproject.com/Articles/5351960/Using-CKEditor-5-with-Code-Block-and-Highlight-js

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值