程序员技术之旅网站/小程序/公众号进入小程序

功能展示

引入Parser

微信小程序中引入Parser可直接在GitHub项目主页(https://github.com/jin-yufeng/Parser)查阅。

代码高亮

高亮插件

Prism官网下载prism.jsprism.css,默认只有css代码有渲染样式,注意选择需要渲染的语言。

小程序所用样式下载路径

https://prismjs.com/download.html#themes=prism-tomorrow&languages=markup+css+clike+javascript+bash+c+csharp+cpp+dart+erlang+git+go+graphql+http+hpkp+hsts+ini+java+javadoc+javadoclike+javastacktrace+json+kotlin+lua+makefile+markup-templating+nginx+objectivec+php+phpdoc+php-extras+properties+python+rust+sql+swift+yaml

添加代码

Parser-libs-MpHtmlParser.jsparse函数中if (config.highlight)判断分支下,修改正则匹配。

因为本人的后端程序处理代码块在

code here

中,所以正则匹配并提取文章中的代码。

  • $1

  • $2是代码整体内容

  • config.highlight是真正的高亮函数

this.data = this.data.replace(/
([\s\S]*?)/g

, function($, $1, $2) {
return "

 + $1 + '>' + config.highlight($2, " + $1 + '>') + "";})

Parser-libs-config.js中添加highlight高亮函数,并且把函数导出。

Parser默认使用js语法来高亮代码,这里稍作修改,对传入的提取出对应语言。

备注:因为后端对提交的文章内容进行了防注入,转换了<>&等符号,所以在高亮时转换回正常符号。

const Prism = require('../../utils/prism.js');var highlight = function (content, attrs) {  content = content.replace(/>/g, ');  content = content.replace(/, '>');  content = content.replace(/&/g, '&');//提取出对应语言var m = attrs.match(/"languages?-(.*)"/i);var lang = m ? m[1] : 'js'return Prism.highlight(content, Prism.languages[lang], lang)}module.exports = {// 高亮处理函数  highlight: highlight  ...}

长按复制

代码高亮功能已经是Parser提供的功能了,只是在此基础上修改了符合自己需求的代码。

长按复制功能是考虑到代码段较多,代码展示的区域又是可以滑动的,Parser提供的selectable选项需要手动拖动选择,出于此考虑做了一个增进。

1. MpHtmlParser构造函数:自定义一个数组接收代码内容。

//MpHtmlParser构造函数constructor(data, options = {}, cb) {
...
this._parserCodeContent = [];
}

2. MpHtmlParserparse函数:代码高亮匹配处保存代码至自定义数组中。

// 代码高亮匹配if (config.highlight) {var that = this //注意用that接收this.data = this.data.replace(/

([\s\S]*?)/g

, function($, $1, $2) {
that._parserCodeContent.push($2)return "

 + $1 + '>' + config.highlight($2, " + $1 + '>') + "";  })}

3. MpHtmlParserpopNode函数:添加是否是pre标签,如果是则在node上添加一个content属性。

// 节点出栈处理
popNode(node) {
...//处理代码长按if (node.name == 'pre') {
node.content = this._parserCodeContent.shift();
}
...
}

4. trees.wxml中添加pre标签,并且增加data-content等于从上一步node上添加的content属性,和bindlongpress="longPressEvent"长按事件绑定。

<rich-text wx:if="{{item.name=='pre'}}" data-content="{{item.content}}" id="{{item.attrs.id}}" class="__{{item.name}}" style="{{Handler.getStyle(item.attrs.style,'block')}}" nodes="{{Handler.setStyle(item)}}" bindlongpress="longPressEvent" />

5. tree.jsmethods函数中添加:长按复制具体实现。

longPressEvent: function (e) {var content = e.currentTarget.dataset.content;
wx.showActionSheet({itemList: ['复制代码'],
success(res) {var tabIndex = res.tapIndex;if (tabIndex == 0) {
wx.setClipboardData({data: content,
success(res) {
wx.showToast({title: '代码已复制'
})
}
})
}
}
})
}

大功告成。

——    感谢阅读    ——

..................

程序员技术之旅

..................

搬砖达人

网站/小程序/公众号

CV工程师

技术分享/记录奇葩问题

伪全栈

Java/Android/Python

........................................................................

您在看吗?

代码雨代码源复制_小程序基于Parser添加长按复制、代码高亮等功能相关推荐

  1. 微信小程序怎么长按复制_微信小程序基于Parser添加长按复制、代码高亮等功能...

    功能展示 引入Parser 微信小程序中引入Parser可直接在项目主页查阅. 代码高亮 高亮插件 Prism官网下载prism.js和prism.css,默认只有css代码有渲染样式,注意选择需要渲 ...

  2. 大商创小程序源码_小程序直播系统有哪些基本功能

    小程序直播系统源码能够构建出高品质的直播平台,现如今较为流行的"直播间+电商.""直播间+教育"等新型的"直播间+"等多元化的直播间方向都不 ...

  3. 飞鱼知识变现小程序2.5.3源码_小程序功能模块

    简介: 微信小程序 飞鱼知识变现小程序2.5.3 前端+后端 模块/小程序更新动态: 问答模块:付费咨询功能.旁听分成功能.会员功能.三级分销 课程模块: 音频课程.视频课程.支持付费.支持免费.三级 ...

  4. 拼团小程序源码_小程序拼团+团购+分销模式,玩转小程序用户裂变

    我们应该都点过朋友扔过来的拼团.砍价链接,拼团.砍价的模式能达到迅速裂变的效果.现在很多大大小小的商家都已经注册了微信小程序,玩起了社交裂变,提高品牌的曝光度,也为门店销量带来了明显的效果.微信小程序 ...

  5. 微信小程序基于swiper组件的tab切换

    代码地址如下: http://www.demodashi.com/demo/14010.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.c ...

  6. 微信小程序基于scroll-view实现锚点定位

    代码地址如下: http://www.demodashi.com/demo/14009.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.c ...

  7. 后退一步 小程序_微信小程序返回上一级页面的实现代码

    微信小程序返回上一级页面 wx.navigateBack({ delta: 1 //返回上一级页面}) html: 保存 js: //提交 submit(){ let data = this.data ...

  8. php 小程序 运动步数_微信小程序获取微信运动步数的实例代码

    现在运动计步很火,无论是蚂蚁森林,还是微信上都很火爆,本文介绍了微信小程序微信运动步数的实例代码,分享给大家 微信小程序API-微信运动 https://mp.weixin.qq.com/debug/ ...

  9. 计算机课程设计之图书借阅小程序-图书馆借阅管理小程序代码-校园图书馆借书还书小程序

    计算机课程设计之图书借阅小程序-图书馆借阅管理小程序代码-校园图书馆借书还书小程序 注意:该项目只展示部分功能,如需了解,评论区咨询即可. 1.开发环境 开发语言:Java 框架:SSM(Spring ...

最新文章

  1. iptables基础——链与表
  2. 成本管理4个过程及相关重点
  3. 图像凸性检测函数convexityDefects在Python2.7下使用opencv3.0的问题
  4. matlab显示像素分布,MATLAb-----7--------如何动态显示鼠标的坐标值和图像像素值
  5. 为什么进mysql需要用户和密码了_centos5安装 mysql 提示需要用户及密码进入?
  6. x10i升级android4.0,智再升级 Xperia X10i升Android 2.3
  7. 多个线程作用于同一个runnable对象
  8. android computescroll_Android问题:自定义ViewGroup,重载computeScroll()方法有什么用?...
  9. 怎样推断两个日期在一周内
  10. 使Java具有响应性的框架和工具包:RxJava,Spring Reactor,Akka和Vert.x概述
  11. 权限列表(包字典)递归成树状结构
  12. Java基础--反射
  13. Bootstrap 带下拉的导航
  14. 利用SpringAOP 实现 日志输出
  15. 我的家庭私有云计划-6
  16. 云服务器上部署pytorch,flask部署pytorch-服务端
  17. Linux 创建静态库(.a)和动态库(.so)
  18. IDEA中配置Junit4
  19. java箱子容积_Java开发笔记(一百三十八)JavaFX的箱子
  20. keep practicing for fast tying

热门文章

  1. JQuery筛选选择器之内容筛选
  2. 商品图片放大镜的JavaScript实现
  3. Flexbox弹性盒模型
  4. android 下滑,Android实现下滑和上滑事件
  5. javascript中的异步编程
  6. 适合0基础的web开发系列教程-文本格式标签汇总
  7. 基于Vue+ElementUI的后台管理系统开发的总结
  8. AirPrint: 无交互的后台打印实现(Print without UI,iOS8+)
  9. PHP IDE免费干货来了!
  10. hadoop常见错误即解决方法