小程序文章样式之代码高亮

简介: 小程序文章样式之代码高亮

引言

最近发现一些博客类小程序的开发者不懂得处理代码高亮细节问题,尤其是不懂得更新代码样式库和自动插入code标签。

I 文章代码高亮的实现

采用开源组件mp-html进行实现,高亮功能依赖于prismjs,默认配置中仅支持 html、css、clike、javascript 变成语言,如果想要更支持更多语言可去prismjs网站下载对应的 prism.min.js 和 prism.css 并替换 plugins/highlight/ 目录下的文件。

使用 HBuilder X 开发时,可以直接通过插件市场导入。

<view class="data-view">
   <mp-html :tag-style="tag_style" :content="detailData.content.rendered" :container-style="container_style"
    selectable="true" > 内容疯狂加载ing...</mp-html>
  </view>

支持语言的样式库

https://prismjs.com/download.html#themes=prism-tomorrow&languages=markup+css+clike+javascript

image.png

1.1 mp-html的用法

  1. 小程序页面支持代码高亮

image.png

wxml

<mp-html  content="{{html}" </mp-html>

符合以下pre格式的将被高亮

<!-- pre 中内含一个 code,并在 pre 或 code 的 class 中设置 language- -->

HBuilderX 2.5.5+ 可以通过 easycom 自动引入 https://github.com/jin-yufeng/mp-html

  1. Wordpress文章页面支持代码高亮

目前我的小程序是通过wordpress的API构建的,因此让文章页面支持代码高亮是很有必要的。

方法:wordpress主题引入mp-html 其他方法:推荐使用Code Prettify插件

1.2  更新支持语言样式库

mp-html组件 默认支持:html、css、c-like、js

通过更新PrismJS,来引入更多的样式库。https://prismjs.com/download.html#themes=prism-tomorrow&languages=markup+css+clike+javascript

image.png

II 自动插入代码块code标签

2.1 方式一:在得到文章数据之后使用正则添加code标签

小程序端实现自动插入代码块code标签<pre><code>,采用正则添加class

缺点:写死的语言样式库,class="language-css"

.replace(/<code([\s\w"=\/\.:;]+)((?:(style="[^"]+")))/ig, '<code')
         .replace(/<code([\s\w"=\/\.:;]+)((?:(class="[^"]+")))/ig, '<code')
         .replace(/<code>/ig, '<code class="language-css">')

修正方式:优化正则添加class,如果已经存在特定语言的class,则不添加class。

2.2 方式二:在发布wp文章时自动插入代码块code标签

在发布wp文章时自动插入代码块code标签:推荐使用wp插件: WP Githuber MD

2.3 小结

不推荐在小程序侧自动插入代码块标签<pre><code>,推荐使用wp插件自动生成code标签,代码库的标签应该是发布wp文章时自动插入,而非在拿到接口数据之后强制写死css样式。

如果在拿到数据后自动插入code标签,不是写死特定语言样式,那样也是可以的。推荐一个自动插入标签的wp插件: WP Githuber MD

错误代码示例:

// 文章数据
   posdData: function() {
    var that = this;
    uni.request({
       url: API + '/wp-json/wp/v2/posts/' + that.posdCenterID,
       success: (res) => {
        that.detailData = res.data;
        that.posdCenterTitle = res.data.title.rendered;
        that.posTag = res.data.tags[0];
        that.postID = res.data.id;
        // 赋值动态框
        that.percent = 100;
        // 正则添加class
        that.contentDate = res.data.content.rendered
         .replace(/<h1([\s\w"=\/\.:;]+)((?:(style="[^"]+")))/ig, '<h1')
         .replace(/<h1([\s\w"=\/\.:;]+)((?:(class="[^"]+")))/ig, '<h1')
         .replace(/<h1>/ig, '<h1 class="h1">')
         .replace(/<h2([\s\w"=\/\.:;]+)((?:(style="[^"]+")))/ig, '<h2')
         .replace(/<h2([\s\w"=\/\.:;]+)((?:(class="[^"]+")))/ig, '<h2')
         .replace(/<h2>/ig, '<h2 class="h2">')
         .replace(/<h3([\s\w"=\/\.:;]+)((?:(style="[^"]+")))/ig, '<h3')
         .replace(/<h3([\s\w"=\/\.:;]+)((?:(class="[^"]+")))/ig, '<h3')
         .replace(/<h3>/ig, '<h3 class="h3">')
         .replace(/<h4([\s\w"=\/\.:;]+)((?:(style="[^"]+")))/ig, '<h4')
         .replace(/<h4([\s\w"=\/\.:;]+)((?:(class="[^"]+")))/ig, '<h4')
         .replace(/<h4>/ig, '<h4 class="h4">')
         .replace(/<h5([\s\w"=\/\.:;]+)((?:(style="[^"]+")))/ig, '<h5')
         .replace(/<h5([\s\w"=\/\.:;]+)((?:(class="[^"]+")))/ig, '<h5')
         .replace(/<h5>/ig, '<h5 class="h4">')
         .replace(/<h6([\s\w"=\/\.:;]+)((?:(style="[^"]+")))/ig, '<h6')
         .replace(/<h6([\s\w"=\/\.:;]+)((?:(class="[^"]+")))/ig, '<h6')
         .replace(/<h6>/ig, '<h6 class="h6">')
         .replace(/<code([\s\w"=\/\.:;]+)((?:(style="[^"]+")))/ig, '<code')
         .replace(/<code([\s\w"=\/\.:;]+)((?:(class="[^"]+")))/ig, '<code')
         .replace(/<code>/ig, '<code class="language-css">')

see also

目录
相关文章
|
1月前
|
小程序 搜索推荐 API
微信小程序:自定义关注公众号组件样式
尽管关注公众号组件的样式固定且不可修改,但产品经理的需求却需要个性化的定制。在这种情况下,我们需要寻找解决方案,以满足这些特殊需求,尽管这可能有点棘手。
60 0
微信小程序:自定义关注公众号组件样式
|
3月前
|
小程序
Taro@3.x+Vue@3.x+TS开发微信小程序,根据系统主题展示不同样式(darkMode)
本文介绍如何在Taro项目中配置深色模式。通过在`src/app.config.ts`设置`darkmode`选项和在`theme.json`中定义主题变量,可以实现跟随系统主题的界面风格切换。
104 0
Taro@3.x+Vue@3.x+TS开发微信小程序,根据系统主题展示不同样式(darkMode)
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的医笙小程序附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的医笙小程序附带文章源码部署视频讲解等
32 2
基于springboot+vue.js+uniapp的医笙小程序附带文章源码部署视频讲解等
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的傣族节日及民间故事推广小程序附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的傣族节日及民间故事推广小程序附带文章源码部署视频讲解等
39 4
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的“口腔助手”小程序附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的“口腔助手”小程序附带文章源码部署视频讲解等
43 3
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的在线疫苗预约小程序附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的在线疫苗预约小程序附带文章源码部署视频讲解等
48 3
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的学生毕业管理小程序附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的学生毕业管理小程序附带文章源码部署视频讲解等
37 1
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的小演员招募小程序附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的小演员招募小程序附带文章源码部署视频讲解等
34 1
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的二手书籍拍卖小程序附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的二手书籍拍卖小程序附带文章源码部署视频讲解等
45 1
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的智慧物流小程序附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的智慧物流小程序附带文章源码部署视频讲解等
35 1