aParse.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. /**
  2. * utils函数引入
  3. **/
  4. import showdown from './showdown.js';
  5. import HtmlToJson from './html2json.js';
  6. /**
  7. * 配置及公有属性
  8. **/
  9. var realWindowWidth = 0;
  10. var realWindowHeight = 0;
  11. dd.getSystemInfo({
  12. success: function(res) {
  13. realWindowWidth = res.windowWidth
  14. realWindowHeight = res.windowHeight
  15. }
  16. })
  17. /**
  18. * 主函数入口区
  19. **/
  20. function aParse(bindName = 'aParseData', type = 'html', data = '<div class="color:red;">数据不能为空</div>', target, imagePadding) {
  21. var that = target;
  22. var transData = {};//存放转化后的数据
  23. if (type == 'html') {
  24. transData = HtmlToJson.html2json(data, bindName);
  25. // console.log(JSON.stringify(transData, ' ', ' '));
  26. } else if (type == 'md' || type == 'markdown') {
  27. var converter = new showdown.Converter();
  28. var html = converter.makeHtml(data);
  29. transData = HtmlToJson.html2json(html, bindName);
  30. // console.log(JSON.stringify(transData, ' ', ' '));
  31. }
  32. transData.view = {};
  33. transData.view.imagePadding = 0;
  34. if (typeof (imagePadding) != 'undefined') {
  35. transData.view.imagePadding = imagePadding
  36. }
  37. var bindData = {};
  38. bindData[bindName] = transData;
  39. that.setData(bindData)
  40. that.aParseImgLoad = aParseImgLoad;
  41. that.aParseImgTap = aParseImgTap;
  42. }
  43. // 图片点击事件
  44. function aParseImgTap(e) {
  45. var that = this;
  46. var nowImgUrl = e.target.dataset.idx;
  47. var tagFrom = e.target.dataset.from;
  48. if (typeof (tagFrom) != 'undefined' && tagFrom.length > 0) {
  49. dd.previewImage({
  50. current: nowImgUrl, // 当前显示图片的http链接
  51. urls: that.data[tagFrom].imageUrls // 需要预览的图片http链接列表
  52. })
  53. }
  54. }
  55. /**
  56. * 图片视觉宽高计算函数区
  57. **/
  58. function aParseImgLoad(e) {
  59. var that = this;
  60. var tagFrom = e.target.dataset.from;
  61. var idx = e.target.dataset.idx;
  62. if (typeof (tagFrom) != 'undefined' && tagFrom.length > 0) {
  63. calMoreImageInfo(e, idx, that, tagFrom)
  64. }
  65. }
  66. // 假循环获取计算图片视觉最佳宽高
  67. function calMoreImageInfo(e, idx, that, bindName) {
  68. var temData = that.data[bindName];
  69. if (!temData || temData.images.length == 0) {
  70. return;
  71. }
  72. var temImages = temData.images;
  73. //因为无法获取view宽度 需要自定义padding进行计算,稍后处理
  74. var recal = aAutoImageCal(e.detail.width, e.detail.height, that, bindName);
  75. // temImages[idx].width = recal.imageWidth;
  76. // temImages[idx].height = recal.imageheight;
  77. // temData.images = temImages;
  78. // var bindData = {};
  79. // bindData[bindName] = temData;
  80. // that.setData(bindData);
  81. var index = temImages[idx].index
  82. var key = `${bindName}`
  83. for (var i of index.split('.')) key += `.nodes[${i}]`
  84. var keyW = key + '.width'
  85. var keyH = key + '.height'
  86. that.setData({
  87. [keyW]: recal.imageWidth,
  88. [keyH]: recal.imageheight,
  89. })
  90. }
  91. // 计算视觉优先的图片宽高
  92. function aAutoImageCal(originalWidth, originalHeight, that, bindName) {
  93. //获取图片的原始长宽
  94. var windowWidth = 0, windowHeight = 0;
  95. var autoWidth = 0, autoHeight = 0;
  96. var results = {};
  97. var padding = that.data[bindName].view.imagePadding;
  98. windowWidth = realWindowWidth - 2 * padding;
  99. windowHeight = realWindowHeight;
  100. //判断按照那种方式进行缩放
  101. // console.log("windowWidth" + windowWidth);
  102. if (originalWidth > windowWidth) {//在图片width大于手机屏幕width时候
  103. autoWidth = windowWidth;
  104. // console.log("autoWidth" + autoWidth);
  105. autoHeight = (autoWidth * originalHeight) / originalWidth;
  106. // console.log("autoHeight" + autoHeight);
  107. results.imageWidth = autoWidth;
  108. results.imageheight = autoHeight;
  109. } else {//否则展示原来的数据
  110. results.imageWidth = originalWidth;
  111. results.imageheight = originalHeight;
  112. }
  113. return results;
  114. }
  115. function aParseTemArray(temArrayName, bindNameReg, total, that) {
  116. var array = [];
  117. var temData = that.data;
  118. var obj = null;
  119. for (var i = 0; i < total; i++) {
  120. var simArr = temData[bindNameReg + i].nodes;
  121. array.push(simArr);
  122. }
  123. temArrayName = temArrayName || 'aParseTemArray';
  124. obj = JSON.parse('{"' + temArrayName + '":""}');
  125. obj[temArrayName] = array;
  126. that.setData(obj);
  127. }
  128. /**
  129. * 配置emojis
  130. *
  131. */
  132. function emojisInit(reg = '', baseSrc = "/aParse/emojis/", emojis) {
  133. HtmlToJson.emojisInit(reg, baseSrc, emojis);
  134. }
  135. module.exports = {
  136. aParse: aParse,
  137. aParseTemArray: aParseTemArray,
  138. emojisInit: emojisInit
  139. }