| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 | /** * author: Di (微信小程序开发工程师) * organization: WeAppDev(微信小程序开发论坛)(http://weappdev.com) *               垂直微信小程序开发交流社区 *  * github地址: https://github.com/icindy/wxParse *  * for: 微信小程序富文本解析 * detail : http://weappdev.com/t/wxparse-alpha0-1-html-markdown/184 *//** * utils函数引入 **/import showdown from 'showdown.js';import HtmlToJson from 'html2json.js';/** * 配置及公有属性 **//** * 主函数入口区 **/function wxParse(bindName = 'wxParseData', type='html', data='<div class="color:red;">暂无</div>', target,imagePadding) {  var that = target;  var transData = {};//存放转化后的数据  if (type == 'html') {    transData = HtmlToJson.html2json(data, bindName);    // console.log(JSON.stringify(transData, ' ', ' '));  } else if (type == 'md' || type == 'markdown') {    var converter = new showdown.Converter();    var html = converter.makeHtml(data);    transData = HtmlToJson.html2json(html, bindName);    // console.log(JSON.stringify(transData, ' ', ' '));  }  transData.view = {};  transData.view.imagePadding = 0;  if(typeof(imagePadding) != 'undefined'){    transData.view.imagePadding = imagePadding  }  var bindData = {};  bindData[bindName] = transData;  that.setData(bindData)  that.wxParseImgLoad = wxParseImgLoad;  that.wxParseImgTap = wxParseImgTap;}// 图片点击事件function wxParseImgTap(e) {  var that = this;  var nowImgUrl = e.target.dataset.src;  var tagFrom = e.target.dataset.from;  if (typeof (tagFrom) != 'undefined' && tagFrom.length > 0) {    wx.previewImage({      current: nowImgUrl, // 当前显示图片的http链接      urls: that.data[tagFrom].imageUrls // 需要预览的图片http链接列表    })  }}/** * 图片视觉宽高计算函数区  **/function wxParseImgLoad(e) {  var that = this;  var tagFrom = e.target.dataset.from;  var idx = e.target.dataset.idx;  if (typeof (tagFrom) != 'undefined' && tagFrom.length > 0) {    calMoreImageInfo(e, idx, that, tagFrom)  } }// 假循环获取计算图片视觉最佳宽高function calMoreImageInfo(e, idx, that, bindName) {  var temData = that.data[bindName];  if (temData.images.length == 0) {    return;  }  var temImages = temData.images;  //因为无法获取view宽度 需要自定义padding进行计算,稍后处理  var recal = wxAutoImageCal(e.detail.width, e.detail.height,that,bindName);   temImages[idx].width = recal.imageWidth;  temImages[idx].height = recal.imageheight;   temData.images = temImages;  var bindData = {};  bindData[bindName] = temData;  that.setData(bindData);}// 计算视觉优先的图片宽高function wxAutoImageCal(originalWidth, originalHeight,that,bindName) {  //获取图片的原始长宽  var windowWidth = 0, windowHeight = 0;  var autoWidth = 0, autoHeight = 0;  var results = {};  wx.getSystemInfo({    success: function (res) {      var padding = that.data[bindName].view.imagePadding;      windowWidth = res.windowWidth-2*padding;      windowHeight = res.windowHeight;      //判断按照那种方式进行缩放    //   console.log("windowWidth" + windowWidth);      if (originalWidth > windowWidth) {//在图片width大于手机屏幕width时候        autoWidth = windowWidth;        // console.log("autoWidth" + autoWidth);        autoHeight = (autoWidth * originalHeight) / originalWidth;        // console.log("autoHeight" + autoHeight);        results.imageWidth = autoWidth;        results.imageheight = autoHeight;      } else {//否则展示原来的数据        results.imageWidth = originalWidth;        results.imageheight = originalHeight;      }    }  })  return results;}function wxParseTemArray(temArrayName,bindNameReg,total,that){  var array = [];  var temData = that.data;  var obj = null;  for(var i = 0; i < total; i++){    var simArr = temData[bindNameReg+i].nodes;    array.push(simArr);  }  temArrayName = temArrayName || 'wxParseTemArray';  obj = JSON.parse('{"'+ temArrayName +'":""}');  obj[temArrayName] = array;  that.setData(obj);}/** * 配置emojis *  */function emojisInit(reg='',baseSrc="/wxParse/emojis/",emojis){   HtmlToJson.emojisInit(reg,baseSrc,emojis);}module.exports = {  wxParse: wxParse,  wxParseTemArray:wxParseTemArray,  emojisInit:emojisInit}
 |