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

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

引言

最近发现一些博客类小程序的开发者不懂得处理代码高亮细节问题,尤其是不懂得更新代码样式库和自动插入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

目录
相关文章
|
2月前
|
JSON 小程序 JavaScript
【微信小程序】-- 自定义组件 -- 创建与引用 &样式(三十二)
【微信小程序】-- 自定义组件 -- 创建与引用 &样式(三十二)
|
2月前
|
小程序 前端开发 开发者
【微信小程序】-- WXSS 模板样式- rpx & import (十三)
【微信小程序】-- WXSS 模板样式- rpx & import (十三)
|
4月前
|
小程序 前端开发 Android开发
解决小程序中textarea ios端样式不兼容的两种方法
解决小程序中textarea ios端样式不兼容的两种方法
|
6月前
|
JSON 小程序 Android开发
小程序列表左滑效果在IOS呈上下滑动影响样式
小程序列表左滑效果在IOS呈上下滑动影响样式
97 0
|
6月前
|
JavaScript 小程序
小程序JS动态修改样式vv
小程序JS动态修改样式
161 0
|
6月前
|
JSON 小程序 前端开发
五分钟上手Vant,快速搭建小程序界面样式
五分钟上手Vant,快速搭建小程序界面样式
115 0
|
2月前
|
小程序
【微信小程序】-- WXSS 模板样式- 全局样式和局部样式(十四)
【微信小程序】-- WXSS 模板样式- 全局样式和局部样式(十四)
|
2月前
|
小程序 JavaScript 前端开发
【原力计划小程序】1、一篇文章深入了解小程序的学习路线(以项目驱动的方式带你学习微信小程序)
【原力计划小程序】1、一篇文章深入了解小程序的学习路线(以项目驱动的方式带你学习微信小程序)
53 1
|
7月前
|
小程序 前端开发
【易售小程序项目】项目介绍、小程序页面展示与系列文章集合
【易售小程序项目】项目介绍、小程序页面展示与系列文章集合
93 2
|
3月前
|
移动开发 小程序 API
【每周一个小技巧】支付宝小程序内如何跳转生活号文章
【每周一个小技巧】支付宝小程序内如何跳转生活号文章
92 1