diff --git a/application/routine/view/.keep b/application/routine/view/.keep deleted file mode 100644 index e69de29b..00000000 diff --git a/application/routine/view/crmebN.zip b/application/routine/view/crmebN.zip deleted file mode 100644 index 2a5bafe8..00000000 Binary files a/application/routine/view/crmebN.zip and /dev/null differ diff --git a/application/routine/view/crmebN/app.js b/application/routine/view/crmebN/app.js new file mode 100644 index 00000000..cf47c0ee --- /dev/null +++ b/application/routine/view/crmebN/app.js @@ -0,0 +1,156 @@ +//app.js +var app = getApp(); +// var wxh = require('../../utils/wxh.js'); +App({ + onLaunch: function () { + // 展示本地存储能力 + var that = this; + var logs = wx.getStorageSync('logs') || [] + logs.unshift(Date.now()) + wx.setStorageSync('logs', logs) + that.getRoutineStyle(); + }, + globalData: { + routineStyle:'#ffffff', + uid: null, + openPages:'', + spid:0, + urlImages: '', + url: 'https://shop.crmeb.net/' + }, + getRoutineStyle:function(){ + var that = this; + wx.request({ + url: that.globalData.url + '/routine/login/get_routine_style', + method: 'post', + dataType : 'json', + success: function (res) { + that.globalData.routineStyle = res.data.data.routine_style; + that.setBarColor(); + } + }) + }, + setBarColor:function(){ + var that = this; + wx.setNavigationBarColor({ + frontColor: '#000000', + backgroundColor: that.globalData.routineStyle, + }) + }, + setUserInfo : function(){ + var that = this; + if (that.globalData.uid == null) {//是否存在用户信息,如果不存在跳转到首页 + wx.showToast({ + title: '用户信息获取失败', + icon: 'none', + duration: 1500, + }) + setTimeout(function () { + wx.navigateTo({ + url: '/pages/enter/enter', + }) + }, 2000) + } + }, + getUserInfo: function () { + var that = this; + wx.getUserInfo({ + lang: 'zh_CN', + success: function (res) { + var userInfo = res.userInfo + wx.login({ + success: function (res) { + if (res.code) { + userInfo.code = res.code; + userInfo.spid = that.globalData.spid; + wx.request({ + url: that.globalData.url + '/routine/login/index', + method: 'post', + dataType : 'json', + data: { + info: userInfo + }, + success: function (res) { + that.globalData.uid = res.data.data.uid; + if (!res.data.data.status){ + wx.redirectTo({ + url: '/pages/login-status/login-status', + }) + } + if (that.globalData.openPages != '') { + wx.reLaunch({ + url: that.globalData.openPages + }) + } else { + wx.switchTab({ + url: '/pages/index/index' + }) + } + }, + fail: function () { + console.log('获取用户信息失败'); + wx.navigateTo({ + url: '/pages/enter/enter', + }) + }, + }) + } else { + console.log('登录失败!' + res.errMsg) + } + }, + fail: function () { + console.log('获取用户信息失败'); + wx.navigateTo({ + url: '/pages/enter/enter', + }) + }, + }) + }, + fail:function(){ + console.log('获取用户信息失败'); + wx.navigateTo({ + url: '/pages/enter/enter', + }) + }, + }) + }, + getUserInfoEnter: function () { + var that = this; + wx.getUserInfo({ + lang: 'zh_CN', + success: function (res) { + var userInfo = res.userInfo + wx.login({ + success: function (res) { + if (res.code) { + userInfo.code = res.code; + userInfo.spid = that.globalData.spid; + wx.request({ + url: that.globalData.url + '/routine/login/index', + method: 'post', + dataType : 'json', + data: { + info: userInfo + }, + success: function (res) { + that.globalData.uid = res.data.data.uid; + if (that.globalData.openPages != '') { + wx.reLaunch({ + url: that.globalData.openPages + }) + } else { + wx.reLaunch({ + url: '/pages/index/index' + }) + } + } + }) + } else { + console.log('登录失败!' + res.errMsg) + } + } + }) + } + }) + }, +}) \ No newline at end of file diff --git a/application/routine/view/crmebN/app.json b/application/routine/view/crmebN/app.json new file mode 100644 index 00000000..33c763c0 --- /dev/null +++ b/application/routine/view/crmebN/app.json @@ -0,0 +1,87 @@ +{ + "pages": [ + "pages/load/load", + "pages/login-status/login-status", + "pages/payment/payment", + "pages/new-con/new-con", + "pages/new-list/new-list", + "pages/enter/enter", + "pages/index/index", + "pages/refunding/refunding", + "pages/miao-list/miao-list", + "pages/coupon-status/coupon-status", + "pages/addaddress/addaddress", + "pages/product-countdown/index", + "pages/refund-page/refund-page", + "pages/refund-order/refund-order", + "pages/cut-one/cut-one", + "pages/spread/spread", + "pages/promotion-order/promotion-order", + "pages/coupon/coupon", + "pages/cut-list/cut-list", + "pages/news-list/news-list", + "pages/product-con/index", + "pages/product-pinke/index", + "pages/comment-con/comment-con", + "pages/orderForm/orderForm", + "pages/orders-list/orders-list", + "pages/comment/comment", + "pages/foo-tan/foo-tan", + "pages/buycar/buycar", + "pages/mycut/mycut", + "pages/join-pink/index", + "pages/user/user", + "pages/integral-con/integral-con", + "pages/orders-con/orders-con", + "pages/order-confirm/order-confirm", + "pages/pink-list/index", + "pages/productSort/productSort", + "pages/address/address", + "pages/feree/feree", + "pages/feree-two/feree-two", + "pages/cash/cash", + "pages/logistics/logistics", + "pages/extension/extension", + "pages/unshop/unshop", + "pages/main/main", + "pages/collect/collect", + "pages/promotion-card/promotion-card" + ], + "window": { + "backgroundTextStyle": "light", + "navigationBarBackgroundColor": "#fff", + "navigationBarTitleText": "WeChat", + "navigationBarTextStyle": "black" + }, + "tabBar": { + "backgroundColor": "#FFFFFF", + "color": "#999", + "selectedColor": "#ff3d3d", + "list": [ + { + "pagePath": "pages/index/index", + "iconPath": "images/1-1.png", + "selectedIconPath": "images/1-2.png", + "text": "首页" + }, + { + "pagePath": "pages/productSort/productSort", + "iconPath": "images/2-1.png", + "selectedIconPath": "images/2-2.png", + "text": "分类" + }, + { + "pagePath": "pages/buycar/buycar", + "iconPath": "images/3-1.png", + "selectedIconPath": "images/3-2.png", + "text": "购物车" + }, + { + "pagePath": "pages/user/user", + "iconPath": "images/4-1.png", + "selectedIconPath": "images/4-2.png", + "text": "我的" + } + ] + } +} \ No newline at end of file diff --git a/application/routine/view/crmebN/app.wxss b/application/routine/view/crmebN/app.wxss new file mode 100644 index 00000000..a26bf224 --- /dev/null +++ b/application/routine/view/crmebN/app.wxss @@ -0,0 +1,41 @@ +@import '/font/font.wxss'; + +/**app.wxss**/ +page{font-size: 28rpx; background-color: #f7f7f7; color: #333;} +.flex{display: flex;} + +/* 星星 */ +.start{width: 122rpx; height: 30rpx; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHoAAADMCAYAAAC8yreMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RkVCNkIwQzY0MzlBMTFFOEI2NEU4QTM5MkZFREZGNjEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RkVCNkIwQzc0MzlBMTFFOEI2NEU4QTM5MkZFREZGNjEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpGRUI2QjBDNDQzOUExMUU4QjY0RThBMzkyRkVERkY2MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpGRUI2QjBDNTQzOUExMUU4QjY0RThBMzkyRkVERkY2MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pmre9csAAAZlSURBVHja7JxLctNA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'); background-repeat: no-repeat; background-size: 122rpx auto;} +.start.star5{background-position: 0 3rpx;} +.start.star4{background-position: 0 -30rpx;} +.start.star3{background-position: 0 -70rpx;} +.start.star2{background-position: 0 -105rpx;} +.start.star1{background-position: 0 -140rpx;} +.start.star0{background-position: 0 -175rpx;} + +.model-bg {display: none; z-index: 50; position: fixed; left: 0; top:0; width: 100%; height: 100%; background-color: rgba(0,0,0,.7);} +.model-bg.show{display: block;} + +.fl{ float:left; } +.fr{ float:right; } +.clear{ clear:both; height: 0; line-height: 0; font-size: 0; } +.clearfix:after{ content:"."; display:block; height:0; visibility:hidden; clear:both; overflow: hidden;} +@keyframes myfirst + { + from {transform: rotate(0deg);} + to {transform: rotate(360deg);} + } +.loadingpic { + animation: myfirst linear 1s infinite; + font-size:40rpx;margin-right:22rpx; +} +.loading{width:100%;height:100rpx;line-height:100rpx;align-items:center;justify-content:center;} +.line{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;} +.line2{word-break:break-all;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;} +.zhao{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#000;opacity:0.7;} +.index-con{position:fixed; left:6rpx;top: 20%; width: 80rpx; height: 100rpx;} +.index-con image{width: 82rpx; height: 82rpx;} +.index-con navigator{width: 82rpx; height: 100rpx;position: absolute;bottom: 0;left: 0} +.index-con .index-area{display:inline-block;top:88rpx;left:0px;position:relative;height: 600rpx;width:82rpx;} + + diff --git a/application/routine/view/crmebN/config.json b/application/routine/view/crmebN/config.json new file mode 100644 index 00000000..829ba1c3 --- /dev/null +++ b/application/routine/view/crmebN/config.json @@ -0,0 +1 @@ +{"dir":"dist"} \ No newline at end of file diff --git a/application/routine/view/crmebN/font/font.wxss b/application/routine/view/crmebN/font/font.wxss new file mode 100644 index 00000000..8f0affbc --- /dev/null +++ b/application/routine/view/crmebN/font/font.wxss @@ -0,0 +1,145 @@ + +@font-face {font-family: "iconfont"; + src: url('iconfont.eot?t=1526371944170'); /* IE9*/ + src: url('iconfont.eot?t=1526371944170#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('data:application/x-font-woff;charset=utf-8;base64,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') format('woff'), + url('iconfont.ttf?t=1526371944170') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/ + url('iconfont.svg?t=1526371944170#iconfont') format('svg'); /* iOS 4.1- */ +} + +.iconfont { + font-family:"iconfont" !important; + font-size:16px; + font-style:normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-msnui-card:before { content: "\e6b3"; } + +.icon-xiaosanjiaoxing01:before { content: "\e630"; } + +.icon-dizhi1:before { content: "\e606"; } + +.icon-custom-service:before { content: "\e616"; } + +.icon-email01:before { content: "\e660"; } + +.icon-erweima:before { content: "\e628"; } + +.icon-shangxinfuwu:before { content: "\e612"; } + +.icon-chongzhi:before { content: "\e61c"; } + +.icon-pinglun:before { content: "\e6c5"; } + +.icon-weixinzhifu:before { content: "\e634"; } + +.icon-102:before { content: "\e602"; } + +.icon-xiazai5:before { content: "\e605"; } + +.icon-dizhi:before { content: "\e609"; } + +.icon-kefu:before { content: "\e607"; } + +.icon-tongji:before { content: "\e60b"; } + +.icon-chanpin:before { content: "\e66e"; } + +.icon-chanpin1:before { content: "\e61f"; } + +.icon-qianbao:before { content: "\e625"; } + +.icon-cainixihuan:before { content: "\e656"; } + +.icon-liaotian:before { content: "\e655"; } + +.icon-weixing:before { content: "\e632"; } + +.icon-xinpin:before { content: "\e640"; } + +.icon-erweima1:before { content: "\e745"; } + +.icon-shanchu:before { content: "\e62b"; } + +.icon-guanbi:before { content: "\e638"; } + +.icon-xingxing:before { content: "\e60a"; } + +.icon-guanbi1:before { content: "\e613"; } + +.icon-jiazaizhong:before { content: "\e6ae"; } + +.icon-dianpu:before { content: "\e61d"; } + +.icon-jingpintuijian:before { content: "\e60c"; } + +.icon-duihao:before { content: "\e60e"; } + +.icon-duihao2:before { content: "\e617"; } + +.icon-dianhua:before { content: "\e61b"; } + +.icon-dianpu1:before { content: "\e615"; } + +.icon-xiaosanjiaoxing02:before { content: "\e60f"; } + +.icon-dizhiguanli:before { content: "\e601"; } + +.icon-duihao3:before { content: "\e66b"; } + +.icon-guanbi2:before { content: "\e642"; } + +.icon-wode:before { content: "\e603"; } + +.icon-fenxiang:before { content: "\e648"; } + +.icon-gouwuche:before { content: "\e62a"; } + +.icon-wallet:before { content: "\e635"; } + +.icon-zhaoxiangji:before { content: "\e608"; } + +.icon-duihao1:before { content: "\e6ba"; } + +.icon-tupian:before { content: "\e695"; } + +.icon-wodejifen:before { content: "\e64a"; } + +.icon-zhifubao:before { content: "\e60d"; } + +.icon-pingjia:before { content: "\e6f2"; } + +.icon-xingxing1:before { content: "\e84e"; } + +.icon-dianpu2:before { content: "\e781"; } + +.icon-xialajiantou:before { content: "\e69a"; } + +.icon-youhuijuan:before { content: "\e69d"; } + +.icon-yuezhifu:before { content: "\e863"; } + +.icon-weixin:before { content: "\e647"; } + +.icon-down:before { content: "\e61e"; } + +.icon-cuohao:before { content: "\e6a9"; } + +.icon-xiala:before { content: "\e604"; } + +.icon-jifenshangcheng:before { content: "\e610"; } + +.icon-wodepintuan:before { content: "\e600"; } + +.icon-zhcc_jiahao:before { content: "\e68a"; } + +.icon-tuikuanguanli:before { content: "\e654"; } + +.icon-tongzhi:before { content: "\e629"; } + +.icon-collect:before { content: "\e65f"; } + +.icon-wodetuiguangren:before { content: "\e611"; } + diff --git a/application/routine/view/crmebN/icon/line.jpg b/application/routine/view/crmebN/icon/line.jpg new file mode 100644 index 00000000..5bda0fac Binary files /dev/null and b/application/routine/view/crmebN/icon/line.jpg differ diff --git a/application/routine/view/crmebN/icon/star-icon.png b/application/routine/view/crmebN/icon/star-icon.png new file mode 100644 index 00000000..e0872b94 Binary files /dev/null and b/application/routine/view/crmebN/icon/star-icon.png differ diff --git a/application/routine/view/crmebN/icon/关闭.png b/application/routine/view/crmebN/icon/关闭.png new file mode 100644 index 00000000..7c71a9bb Binary files /dev/null and b/application/routine/view/crmebN/icon/关闭.png differ diff --git a/application/routine/view/crmebN/icon/图层-1.png b/application/routine/view/crmebN/icon/图层-1.png new file mode 100644 index 00000000..9279fe96 Binary files /dev/null and b/application/routine/view/crmebN/icon/图层-1.png differ diff --git a/application/routine/view/crmebN/icon/图层-22.png b/application/routine/view/crmebN/icon/图层-22.png new file mode 100644 index 00000000..770935ba Binary files /dev/null and b/application/routine/view/crmebN/icon/图层-22.png differ diff --git a/application/routine/view/crmebN/icon/圆角矩形-1.png b/application/routine/view/crmebN/icon/圆角矩形-1.png new file mode 100644 index 00000000..b33d242e Binary files /dev/null and b/application/routine/view/crmebN/icon/圆角矩形-1.png differ diff --git a/application/routine/view/crmebN/icon/圆角矩形-2-拷贝.png b/application/routine/view/crmebN/icon/圆角矩形-2-拷贝.png new file mode 100644 index 00000000..ac9cf879 Binary files /dev/null and b/application/routine/view/crmebN/icon/圆角矩形-2-拷贝.png differ diff --git a/application/routine/view/crmebN/icon/形状-2-拷贝-3.png b/application/routine/view/crmebN/icon/形状-2-拷贝-3.png new file mode 100644 index 00000000..894546c6 Binary files /dev/null and b/application/routine/view/crmebN/icon/形状-2-拷贝-3.png differ diff --git a/application/routine/view/crmebN/icon/形状-2-拷贝.png b/application/routine/view/crmebN/icon/形状-2-拷贝.png new file mode 100644 index 00000000..07c06157 Binary files /dev/null and b/application/routine/view/crmebN/icon/形状-2-拷贝.png differ diff --git a/application/routine/view/crmebN/icon/拼团图标.png b/application/routine/view/crmebN/icon/拼团图标.png new file mode 100644 index 00000000..aa103acf Binary files /dev/null and b/application/routine/view/crmebN/icon/拼团图标.png differ diff --git a/application/routine/view/crmebN/icon/送货1.png b/application/routine/view/crmebN/icon/送货1.png new file mode 100644 index 00000000..0b5a643b Binary files /dev/null and b/application/routine/view/crmebN/icon/送货1.png differ diff --git a/application/routine/view/crmebN/images/1-1.png b/application/routine/view/crmebN/images/1-1.png new file mode 100644 index 00000000..9e3426b5 Binary files /dev/null and b/application/routine/view/crmebN/images/1-1.png differ diff --git a/application/routine/view/crmebN/images/1-2.png b/application/routine/view/crmebN/images/1-2.png new file mode 100644 index 00000000..6eebf071 Binary files /dev/null and b/application/routine/view/crmebN/images/1-2.png differ diff --git a/application/routine/view/crmebN/images/2-1.png b/application/routine/view/crmebN/images/2-1.png new file mode 100644 index 00000000..fbe79416 Binary files /dev/null and b/application/routine/view/crmebN/images/2-1.png differ diff --git a/application/routine/view/crmebN/images/2-2.png b/application/routine/view/crmebN/images/2-2.png new file mode 100644 index 00000000..5702c864 Binary files /dev/null and b/application/routine/view/crmebN/images/2-2.png differ diff --git a/application/routine/view/crmebN/images/3-1.png b/application/routine/view/crmebN/images/3-1.png new file mode 100644 index 00000000..45378413 Binary files /dev/null and b/application/routine/view/crmebN/images/3-1.png differ diff --git a/application/routine/view/crmebN/images/3-2.png b/application/routine/view/crmebN/images/3-2.png new file mode 100644 index 00000000..172566e7 Binary files /dev/null and b/application/routine/view/crmebN/images/3-2.png differ diff --git a/application/routine/view/crmebN/images/4-1.png b/application/routine/view/crmebN/images/4-1.png new file mode 100644 index 00000000..f8f11073 Binary files /dev/null and b/application/routine/view/crmebN/images/4-1.png differ diff --git a/application/routine/view/crmebN/images/4-2.png b/application/routine/view/crmebN/images/4-2.png new file mode 100644 index 00000000..0ec2d263 Binary files /dev/null and b/application/routine/view/crmebN/images/4-2.png differ diff --git a/application/routine/view/crmebN/images/collect-shixiao.png b/application/routine/view/crmebN/images/collect-shixiao.png new file mode 100644 index 00000000..0e5cdb1d Binary files /dev/null and b/application/routine/view/crmebN/images/collect-shixiao.png differ diff --git a/application/routine/view/crmebN/images/dfh.png b/application/routine/view/crmebN/images/dfh.png new file mode 100644 index 00000000..405d66d2 Binary files /dev/null and b/application/routine/view/crmebN/images/dfh.png differ diff --git a/application/routine/view/crmebN/images/dfk.png b/application/routine/view/crmebN/images/dfk.png new file mode 100644 index 00000000..20a637a9 Binary files /dev/null and b/application/routine/view/crmebN/images/dfk.png differ diff --git a/application/routine/view/crmebN/images/dpj.png b/application/routine/view/crmebN/images/dpj.png new file mode 100644 index 00000000..6b105e71 Binary files /dev/null and b/application/routine/view/crmebN/images/dpj.png differ diff --git a/application/routine/view/crmebN/images/dsh.png b/application/routine/view/crmebN/images/dsh.png new file mode 100644 index 00000000..c5fe6c20 Binary files /dev/null and b/application/routine/view/crmebN/images/dsh.png differ diff --git a/application/routine/view/crmebN/images/error-icon.png b/application/routine/view/crmebN/images/error-icon.png new file mode 100644 index 00000000..18ede196 Binary files /dev/null and b/application/routine/view/crmebN/images/error-icon.png differ diff --git a/application/routine/view/crmebN/images/home.png b/application/routine/view/crmebN/images/home.png new file mode 100644 index 00000000..6e2f4a18 Binary files /dev/null and b/application/routine/view/crmebN/images/home.png differ diff --git a/application/routine/view/crmebN/images/lie.png b/application/routine/view/crmebN/images/lie.png new file mode 100644 index 00000000..f19d0822 Binary files /dev/null and b/application/routine/view/crmebN/images/lie.png differ diff --git a/application/routine/view/crmebN/images/long.gif b/application/routine/view/crmebN/images/long.gif new file mode 100644 index 00000000..ccde7b17 Binary files /dev/null and b/application/routine/view/crmebN/images/long.gif differ diff --git a/application/routine/view/crmebN/images/nav-01.png b/application/routine/view/crmebN/images/nav-01.png new file mode 100644 index 00000000..73e48afb Binary files /dev/null and b/application/routine/view/crmebN/images/nav-01.png differ diff --git a/application/routine/view/crmebN/images/nav-02.png b/application/routine/view/crmebN/images/nav-02.png new file mode 100644 index 00000000..3f3df274 Binary files /dev/null and b/application/routine/view/crmebN/images/nav-02.png differ diff --git a/application/routine/view/crmebN/images/nav-03.png b/application/routine/view/crmebN/images/nav-03.png new file mode 100644 index 00000000..224c29af Binary files /dev/null and b/application/routine/view/crmebN/images/nav-03.png differ diff --git a/application/routine/view/crmebN/images/nav-04.png b/application/routine/view/crmebN/images/nav-04.png new file mode 100644 index 00000000..8935217a Binary files /dev/null and b/application/routine/view/crmebN/images/nav-04.png differ diff --git a/application/routine/view/crmebN/images/nav-05.png b/application/routine/view/crmebN/images/nav-05.png new file mode 100644 index 00000000..653b9994 Binary files /dev/null and b/application/routine/view/crmebN/images/nav-05.png differ diff --git a/application/routine/view/crmebN/images/unknown.png b/application/routine/view/crmebN/images/unknown.png new file mode 100644 index 00000000..361a1e0a Binary files /dev/null and b/application/routine/view/crmebN/images/unknown.png differ diff --git a/application/routine/view/crmebN/pages/addaddress/addaddress.js b/application/routine/view/crmebN/pages/addaddress/addaddress.js new file mode 100644 index 00000000..cb8462d2 --- /dev/null +++ b/application/routine/view/crmebN/pages/addaddress/addaddress.js @@ -0,0 +1,156 @@ +var app = getApp(); +Page({ + data: { + _num:1, + region: ['省','市','区'], + cartId : '', + pinkId : '', + couponId : '', + id:0, + userAddress:[] + }, + onLoad: function (options) { + app.setBarColor(); + app.setUserInfo(); + if (options.cartId){ + this.setData({ + cartId: options.cartId, + pinkId: options.pinkId, + couponId: options.couponId, + }) + } + if (options.id){ + this.setData({ + id: options.id + }) + this.getUserAddress(); + } + }, + getUserAddress: function () {//get_user_address + var that = this; + + wx.request({ + url: app.globalData.url + '/routine/auth_api/get_user_address?uid=' + app.globalData.uid, + method: 'GET', + data: { + addressId : that.data.id + }, + success: function (res) { + console.log(res); + var regionOne = "region.0"; + var regionTwo = "region.1"; + var regionTherr = "region.2"; + that.setData({ + userAddress: res.data.data, + [regionOne]: res.data.data.province, + [regionTwo]: res.data.data.city, + [regionTherr]: res.data.data.district, + _num: res.data.data.is_default == 1 ? 0 : 1 + }) + } + }) + }, + bindRegionChange: function (e) { + this.setData({ + region: e.detail.value + }) + }, + defaulttap:function(e){ + var num = this.data._num; + if(num==1){ + this.setData({ + _num: 0 + }) + }else{ + this.setData({ + _num: 1 + }) + } + }, + + formSubmit: function (e) { + var warn = ""; + var that = this; + var flag = true; + var cartId = ''; + var name = e.detail.value.name; + var phone = e.detail.value.phone; + var area = JSON.stringify(this.data.region); + var fulladdress = e.detail.value.fulladdress; + var addressP = {}; + if (name == "") { + warn = '请输入姓名'; + } else if (!/^1(3|4|5|7|8)\d{9}$/i.test(phone)) { + warn = '您输入的手机号有误' + } else if (area == '["省","市","区"]'){ + warn = '请选择地区'; + } else if (fulladdress == "") { + warn = "请填写具体地址"; + } else{ + flag = false; + } + if(flag==true){ + wx.showModal({ + title: '提示', + content: warn + }) + }else{ + addressP.province = this.data.region[0]; + addressP.city = this.data.region[1]; + addressP.district = this.data.region[2]; + + wx.request({ + url: app.globalData.url + '/routine/auth_api/edit_user_address?uid=' + app.globalData.uid, + method: 'POST', + data: { + address: addressP, + is_default : that.data._num == 0 ? 1 : 0, + real_name : name, + post_code : '', + phone : phone, + detail : fulladdress, + id:that.data.id + }, + success: function (res) { + if (res.data.code == 200) { + if (that.data.id) { + wx.showToast({ + title: '修改成功', + icon: 'success', + duration: 1000 + }) + }else{ + wx.showToast({ + title: '添加成功', + icon: 'success', + duration: 1000 + }) + } + setTimeout(function () { + if (that.data.cartId) { + + var cartId = that.data.cartId; + var pinkId = that.data.pinkId; + var couponId = that.data.couponId; + that.setData({ + cartId: '', + pinkId: '', + couponId:'', + }) + wx.navigateTo({ //跳转至指定页面并关闭其他打开的所有页面(这个最好用在返回至首页的的时候) + url: '/pages/order-confirm/order-confirm?id=' + cartId + '&addressId=' + that.data.id + '&pinkId=' + pinkId + '&couponId=' + couponId + }) + } else { + wx.navigateTo({ //跳转至指定页面并关闭其他打开的所有页面(这个最好用在返回至首页的的时候) + url: '/pages/address/address' + }) + } + },1200) + } + } + }) + } + } + + +}) \ No newline at end of file diff --git a/application/routine/view/crmebN/pages/addaddress/addaddress.json b/application/routine/view/crmebN/pages/addaddress/addaddress.json new file mode 100644 index 00000000..00cdc310 --- /dev/null +++ b/application/routine/view/crmebN/pages/addaddress/addaddress.json @@ -0,0 +1,3 @@ +{ + "navigationBarTitleText": "添加收获地址" +} \ No newline at end of file diff --git a/application/routine/view/crmebN/pages/addaddress/addaddress.wxml b/application/routine/view/crmebN/pages/addaddress/addaddress.wxml new file mode 100644 index 00000000..a1c6e450 --- /dev/null +++ b/application/routine/view/crmebN/pages/addaddress/addaddress.wxml @@ -0,0 +1,20 @@ +
+ diff --git a/application/routine/view/crmebN/pages/addaddress/addaddress.wxss b/application/routine/view/crmebN/pages/addaddress/addaddress.wxss new file mode 100644 index 00000000..7c1cfb9b --- /dev/null +++ b/application/routine/view/crmebN/pages/addaddress/addaddress.wxss @@ -0,0 +1,13 @@ +.information{width:100%;height:364rpx;background-color:#ffffff;display:block;} +.information-li{height:90rpx;padding:0 20rpx;line-height:90rpx;border-bottom:1rpx solid #F7F7F7;} +.information-li label,.cashNum label{width:170rpx;display:inline-block;} +.information-li input,.cashNum input{width:100%;height:100%;} +.placeholder{color:#cccccc;} +.but{width:710rpx;height:90rpx;line-height:90rpx;text-align:center;background-color:#F84426;color:#ffffff;font-size:32rpx;margin-top:70rpx;} +.areas{color:#808080;display:inline-block;width:510rpx; overflow:hidden;text-overflow:ellipsis;white-space:nowrap} +.map{float:right;font-size:45rpx;color:#F14233;} +.area{width:137rpx !important;} +.default{height:90rpx;line-height:90rpx;padding:0 20rpx;background-color:#ffffff;margin-top:20rpx;color:#333333;} +.duihao{height:45rpx;line-height:45rpx;text-align:center;border-radius:50%;border:1rpx solid #DEDEDE;display:inline-block;width:45rpx;font-size:30rpx;color:#ffffff;margin-right:21rpx;} +.active{background-color:#F84426;} + diff --git a/application/routine/view/crmebN/pages/address/address.js b/application/routine/view/crmebN/pages/address/address.js new file mode 100644 index 00000000..7dd9e1f0 --- /dev/null +++ b/application/routine/view/crmebN/pages/address/address.js @@ -0,0 +1,170 @@ +// pages/address/address.js +var app = getApp(); +Page({ + data: { + _num:'', + cartId: '', + pinkId: '', + couponId: '', + addressArray:[] + }, + onLoad: function (options) { + app.setBarColor(); + app.setUserInfo(); + console.log(options); + if (options.cartId) { + this.setData({ + cartId: options.cartId, + pinkId: options.pinkId, + couponId: options.couponId, + }) + } + this.getAddress(); + }, + getAddress: function () { + var that = this; + var header = { + 'content-type': 'application/x-www-form-urlencoded', + }; + wx.request({ + url: app.globalData.url + '/routine/auth_api/user_address_list?uid=' + app.globalData.uid, + method: 'POST', + header: header, + success: function (res) { + if (res.data.code == 200) { + if (res.data.data.length < 1) { + wx.showToast({ + title: '暂无收货地址,请先添加收货地址', + icon: 'none', + duration: 1000, + }) + setTimeout(function () { + that.addAddress(); + }, 1100) + } else { + that.setData({ + addressArray: res.data.data + }) + for (var i in res.data.data){ + if (res.data.data[i].is_default){ + that.setData({ + _num: res.data.data[i].id + }) + } + } + } + } + } + }) + }, + addAddress:function(){ + + var cartId = this.data.cartId; + var pinkId = this.data.pinkId; + var couponId = this.data.couponId; + this.setData({ + cartId: '', + pinkId:'', + couponId:'', + }) + wx.navigateTo({ //跳转至指定页面并关闭其他打开的所有页面(这个最好用在返回至首页的的时候) + url: '/pages/addaddress/addaddress?cartId=' + cartId + '&pinkId=' + pinkId + '&couponId=' + couponId + }) + }, + goOrder:function(e){ + var id = e.currentTarget.dataset.id; + var cartId = ''; + var pinkId = ''; + var couponId = ''; + if (this.data.cartId && id){ + cartId = this.data.cartId; + pinkId = this.data.pinkId; + couponId = this.data.couponId; + this.setData({ + cartId : '', + pinkId : '', + couponId : '', + }) + wx.navigateTo({ //跳转至指定页面并关闭其他打开的所有页面(这个最好用在返回至首页的的时候) + url: '/pages/order-confirm/order-confirm?id=' + cartId + '&addressId=' + id + '&pinkId=' + pinkId + '&couponId=' + couponId + }) + } + }, + delAddress:function(e){ + var id = e.currentTarget.dataset.id; + var that = this; + var header = { + 'content-type': 'application/x-www-form-urlencoded', + }; + wx.request({ + url: app.globalData.url + '/routine/auth_api/remove_user_address?uid=' + app.globalData.uid, + method: 'GET', + header: header, + data:{ + addressId:id + }, + success: function (res) { + if (res.data.code == 200) { + wx.showToast({ + title: '删除成功', + icon: 'success', + duration: 1000, + }) + that.getAddress(); + } else { + wx.showToast({ + title: res.data.msg, + icon: 'none', + duration: 1000, + }) + } + } + }) + }, + editAddress: function (e) { + var cartId = this.data.cartId; + var pinkId = this.data.pinkId; + var couponId = this.data.couponId; + this.setData({ + cartId: '', + pinkId: '', + couponId: '', + }) + wx.navigateTo({ //跳转至指定页面并关闭其他打开的所有页面(这个最好用在返回至首页的的时候) + url: '/pages/addaddress/addaddress?id=' + e.currentTarget.dataset.id + '&cartId=' + cartId + '&pinkId=' + pinkId + '&couponId=' + couponId + }) + }, + activetap:function(e){ + var id = e.target.dataset.idx; + var that = this; + var header = { + 'content-type': 'application/x-www-form-urlencoded', + }; + wx.request({ + url: app.globalData.url + '/routine/auth_api/set_user_default_address?uid=' + app.globalData.uid, + method: 'GET', + header: header, + data:{ + addressId:id + }, + success: function (res) { + if (res.data.code == 200) { + wx.showToast({ + title: '设置成功', + icon: 'success', + duration: 1000, + }) + that.setData({ + _num: id + }) + } else { + wx.showToast({ + title: res.data.msg, + icon: 'none', + duration: 1000, + }) + } + } + }) + } +}) \ No newline at end of file diff --git a/application/routine/view/crmebN/pages/address/address.json b/application/routine/view/crmebN/pages/address/address.json new file mode 100644 index 00000000..d8dcc481 --- /dev/null +++ b/application/routine/view/crmebN/pages/address/address.json @@ -0,0 +1 @@ +{"navigationBarTitleText": "收获地址管理"} \ No newline at end of file diff --git a/application/routine/view/crmebN/pages/address/address.wxml b/application/routine/view/crmebN/pages/address/address.wxml new file mode 100644 index 00000000..4da8b782 --- /dev/null +++ b/application/routine/view/crmebN/pages/address/address.wxml @@ -0,0 +1,22 @@ +tags around block-level tags. + text = showdown.subParser('hashHTMLBlocks')(text, options, globals); + text = showdown.subParser('paragraphs')(text, options, globals); + + text = globals.converter._dispatch('blockGamut.after', text, options, globals); + + return text; +}); + +showdown.subParser('blockQuotes', function (text, options, globals) { + 'use strict'; + + text = globals.converter._dispatch('blockQuotes.before', text, options, globals); + /* + text = text.replace(/ + ( // Wrap whole match in $1 + ( + ^[ \t]*>[ \t]? // '>' at the start of a line + .+\n // rest of the first line + (.+\n)* // subsequent consecutive lines + \n* // blanks + )+ + ) + /gm, function(){...}); + */ + + text = text.replace(/((^[ \t]{0,3}>[ \t]?.+\n(.+\n)*\n*)+)/gm, function (wholeMatch, m1) { + var bq = m1; + + // attacklab: hack around Konqueror 3.5.4 bug: + // "----------bug".replace(/^-/g,"") == "bug" + bq = bq.replace(/^[ \t]*>[ \t]?/gm, '~0'); // trim one level of quoting + + // attacklab: clean up hack + bq = bq.replace(/~0/g, ''); + + bq = bq.replace(/^[ \t]+$/gm, ''); // trim whitespace-only lines + bq = showdown.subParser('githubCodeBlocks')(bq, options, globals); + bq = showdown.subParser('blockGamut')(bq, options, globals); // recurse + + bq = bq.replace(/(^|\n)/g, '$1 '); + // These leading spaces screw with
content, so we need to fix that:
+ bq = bq.replace(/(\s*[^\r]+?<\/pre>)/gm, function (wholeMatch, m1) {
+ var pre = m1;
+ // attacklab: hack around Konqueror 3.5.4 bug:
+ pre = pre.replace(/^ /mg, '~0');
+ pre = pre.replace(/~0/g, '');
+ return pre;
+ });
+
+ return showdown.subParser('hashBlock')('\n' + bq + '\n
', options, globals);
+ });
+
+ text = globals.converter._dispatch('blockQuotes.after', text, options, globals);
+ return text;
+});
+
+/**
+ * Process Markdown `` blocks.
+ */
+showdown.subParser('codeBlocks', function (text, options, globals) {
+ 'use strict';
+
+ text = globals.converter._dispatch('codeBlocks.before', text, options, globals);
+ /*
+ text = text.replace(text,
+ /(?:\n\n|^)
+ ( // $1 = the code block -- one or more lines, starting with a space/tab
+ (?:
+ (?:[ ]{4}|\t) // Lines must start with a tab or a tab-width of spaces - attacklab: g_tab_width
+ .*\n+
+ )+
+ )
+ (\n*[ ]{0,3}[^ \t\n]|(?=~0)) // attacklab: g_tab_width
+ /g,function(){...});
+ */
+
+ // attacklab: sentinel workarounds for lack of \A and \Z, safari\khtml bug
+ text += '~0';
+
+ var pattern = /(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^ \t\n]|(?=~0))/g;
+ text = text.replace(pattern, function (wholeMatch, m1, m2) {
+ var codeblock = m1,
+ nextChar = m2,
+ end = '\n';
+
+ codeblock = showdown.subParser('outdent')(codeblock);
+ codeblock = showdown.subParser('encodeCode')(codeblock);
+ codeblock = showdown.subParser('detab')(codeblock);
+ codeblock = codeblock.replace(/^\n+/g, ''); // trim leading newlines
+ codeblock = codeblock.replace(/\n+$/g, ''); // trim trailing newlines
+
+ if (options.omitExtraWLInCodeBlocks) {
+ end = '';
+ }
+
+ codeblock = '' + codeblock + end + '
';
+
+ return showdown.subParser('hashBlock')(codeblock, options, globals) + nextChar;
+ });
+
+ // attacklab: strip sentinel
+ text = text.replace(/~0/, '');
+
+ text = globals.converter._dispatch('codeBlocks.after', text, options, globals);
+ return text;
+});
+
+/**
+ *
+ * * Backtick quotes are used for spans.
+ *
+ * * You can use multiple backticks as the delimiters if you want to
+ * include literal backticks in the code span. So, this input:
+ *
+ * Just type ``foo `bar` baz`` at the prompt.
+ *
+ * Will translate to:
+ *
+ * Just type foo `bar` baz at the prompt.
+ *
+ * There's no arbitrary limit to the number of backticks you
+ * can use as delimters. If you need three consecutive backticks
+ * in your code, use four for delimiters, etc.
+ *
+ * * You can use spaces to get literal backticks at the edges:
+ *
+ * ... type `` `bar` `` ...
+ *
+ * Turns to:
+ *
+ * ... type `bar` ...
+ */
+showdown.subParser('codeSpans', function (text, options, globals) {
+ 'use strict';
+
+ text = globals.converter._dispatch('codeSpans.before', text, options, globals);
+
+ /*
+ text = text.replace(/
+ (^|[^\\]) // Character before opening ` can't be a backslash
+ (`+) // $2 = Opening run of `
+ ( // $3 = The code block
+ [^\r]*?
+ [^`] // attacklab: work around lack of lookbehind
+ )
+ \2 // Matching closer
+ (?!`)
+ /gm, function(){...});
+ */
+
+ if (typeof(text) === 'undefined') {
+ text = '';
+ }
+ text = text.replace(/(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm,
+ function (wholeMatch, m1, m2, m3) {
+ var c = m3;
+ c = c.replace(/^([ \t]*)/g, ''); // leading whitespace
+ c = c.replace(/[ \t]*$/g, ''); // trailing whitespace
+ c = showdown.subParser('encodeCode')(c);
+ return m1 + '' + c + '';
+ }
+ );
+
+ text = globals.converter._dispatch('codeSpans.after', text, options, globals);
+ return text;
+});
+
+/**
+ * Convert all tabs to spaces
+ */
+showdown.subParser('detab', function (text) {
+ 'use strict';
+
+ // expand first n-1 tabs
+ text = text.replace(/\t(?=\t)/g, ' '); // g_tab_width
+
+ // replace the nth with two sentinels
+ text = text.replace(/\t/g, '~A~B');
+
+ // use the sentinel to anchor our regex so it doesn't explode
+ text = text.replace(/~B(.+?)~A/g, function (wholeMatch, m1) {
+ var leadingText = m1,
+ numSpaces = 4 - leadingText.length % 4; // g_tab_width
+
+ // there *must* be a better way to do this:
+ for (var i = 0; i < numSpaces; i++) {
+ leadingText += ' ';
+ }
+
+ return leadingText;
+ });
+
+ // clean up sentinels
+ text = text.replace(/~A/g, ' '); // g_tab_width
+ text = text.replace(/~B/g, '');
+
+ return text;
+
+});
+
+/**
+ * Smart processing for ampersands and angle brackets that need to be encoded.
+ */
+showdown.subParser('encodeAmpsAndAngles', function (text) {
+ 'use strict';
+ // Ampersand-encoding based entirely on Nat Irons's Amputator MT plugin:
+ // http://bumppo.net/projects/amputator/
+ text = text.replace(/&(?!#?[xX]?(?:[0-9a-fA-F]+|\w+);)/g, '&');
+
+ // Encode naked <'s
+ text = text.replace(/<(?![a-z\/?\$!])/gi, '<');
+
+ return text;
+});
+
+/**
+ * Returns the string, with after processing the following backslash escape sequences.
+ *
+ * attacklab: The polite way to do this is with the new escapeCharacters() function:
+ *
+ * text = escapeCharacters(text,"\\",true);
+ * text = escapeCharacters(text,"`*_{}[]()>#+-.!",true);
+ *
+ * ...but we're sidestepping its use of the (slow) RegExp constructor
+ * as an optimization for Firefox. This function gets called a LOT.
+ */
+showdown.subParser('encodeBackslashEscapes', function (text) {
+ 'use strict';
+ text = text.replace(/\\(\\)/g, showdown.helper.escapeCharactersCallback);
+ text = text.replace(/\\([`*_{}\[\]()>#+-.!])/g, showdown.helper.escapeCharactersCallback);
+ return text;
+});
+
+/**
+ * Encode/escape certain characters inside Markdown code runs.
+ * The point is that in code, these characters are literals,
+ * and lose their special Markdown meanings.
+ */
+showdown.subParser('encodeCode', function (text) {
+ 'use strict';
+
+ // Encode all ampersands; HTML entities are not
+ // entities within a Markdown code span.
+ text = text.replace(/&/g, '&');
+
+ // Do the angle bracket song and dance:
+ text = text.replace(//g, '>');
+
+ // Now, escape characters that are magic in Markdown:
+ text = showdown.helper.escapeCharacters(text, '*_{}[]\\', false);
+
+ // jj the line above breaks this:
+ //---
+ //* Item
+ // 1. Subitem
+ // special char: *
+ // ---
+
+ return text;
+});
+
+/**
+ * Input: an email address, e.g. "foo@example.com"
+ *
+ * Output: the email address as a mailto link, with each character
+ * of the address encoded as either a decimal or hex entity, in
+ * the hopes of foiling most address harvesting spam bots. E.g.:
+ *
+ * foo
+ * @example.com
+ *
+ * Based on a filter by Matthew Wickline, posted to the BBEdit-Talk
+ * mailing list:
+ *
+ */
+showdown.subParser('encodeEmailAddress', function (addr) {
+ 'use strict';
+
+ var encode = [
+ function (ch) {
+ return '' + ch.charCodeAt(0) + ';';
+ },
+ function (ch) {
+ return '' + ch.charCodeAt(0).toString(16) + ';';
+ },
+ function (ch) {
+ return ch;
+ }
+ ];
+
+ addr = 'mailto:' + addr;
+
+ addr = addr.replace(/./g, function (ch) {
+ if (ch === '@') {
+ // this *must* be encoded. I insist.
+ ch = encode[Math.floor(Math.random() * 2)](ch);
+ } else if (ch !== ':') {
+ // leave ':' alone (to spot mailto: later)
+ var r = Math.random();
+ // roughly 10% raw, 45% hex, 45% dec
+ ch = (
+ r > 0.9 ? encode[2](ch) : r > 0.45 ? encode[1](ch) : encode[0](ch)
+ );
+ }
+ return ch;
+ });
+
+ addr = '' + addr + '';
+ addr = addr.replace(/">.+:/g, '">'); // strip the mailto: from the visible part
+
+ return addr;
+});
+
+/**
+ * Within tags -- meaning between < and > -- encode [\ ` * _] so they
+ * don't conflict with their use in Markdown for code, italics and strong.
+ */
+showdown.subParser('escapeSpecialCharsWithinTagAttributes', function (text) {
+ 'use strict';
+
+ // Build a regex to find HTML tags and comments. See Friedl's
+ // "Mastering Regular Expressions", 2nd Ed., pp. 200-201.
+ var regex = /(<[a-z\/!$]("[^"]*"|'[^']*'|[^'">])*>|)/gi;
+
+ text = text.replace(regex, function (wholeMatch) {
+ var tag = wholeMatch.replace(/(.)<\/?code>(?=.)/g, '$1`');
+ tag = showdown.helper.escapeCharacters(tag, '\\`*_', false);
+ return tag;
+ });
+
+ return text;
+});
+
+/**
+ * Handle github codeblocks prior to running HashHTML so that
+ * HTML contained within the codeblock gets escaped properly
+ * Example:
+ * ```ruby
+ * def hello_world(x)
+ * puts "Hello, #{x}"
+ * end
+ * ```
+ */
+showdown.subParser('githubCodeBlocks', function (text, options, globals) {
+ 'use strict';
+
+ // early exit if option is not enabled
+ if (!options.ghCodeBlocks) {
+ return text;
+ }
+
+ text = globals.converter._dispatch('githubCodeBlocks.before', text, options, globals);
+
+ text += '~0';
+
+ text = text.replace(/(?:^|\n)```(.*)\n([\s\S]*?)\n```/g, function (wholeMatch, language, codeblock) {
+ var end = (options.omitExtraWLInCodeBlocks) ? '' : '\n';
+
+ // First parse the github code block
+ codeblock = showdown.subParser('encodeCode')(codeblock);
+ codeblock = showdown.subParser('detab')(codeblock);
+ codeblock = codeblock.replace(/^\n+/g, ''); // trim leading newlines
+ codeblock = codeblock.replace(/\n+$/g, ''); // trim trailing whitespace
+
+ codeblock = '' + codeblock + end + '
';
+
+ codeblock = showdown.subParser('hashBlock')(codeblock, options, globals);
+
+ // Since GHCodeblocks can be false positives, we need to
+ // store the primitive text and the parsed text in a global var,
+ // and then return a token
+ return '\n\n~G' + (globals.ghCodeBlocks.push({text: wholeMatch, codeblock: codeblock}) - 1) + 'G\n\n';
+ });
+
+ // attacklab: strip sentinel
+ text = text.replace(/~0/, '');
+
+ return globals.converter._dispatch('githubCodeBlocks.after', text, options, globals);
+});
+
+showdown.subParser('hashBlock', function (text, options, globals) {
+ 'use strict';
+ text = text.replace(/(^\n+|\n+$)/g, '');
+ return '\n\n~K' + (globals.gHtmlBlocks.push(text) - 1) + 'K\n\n';
+});
+
+showdown.subParser('hashElement', function (text, options, globals) {
+ 'use strict';
+
+ return function (wholeMatch, m1) {
+ var blockText = m1;
+
+ // Undo double lines
+ blockText = blockText.replace(/\n\n/g, '\n');
+ blockText = blockText.replace(/^\n/, '');
+
+ // strip trailing blank lines
+ blockText = blockText.replace(/\n+$/g, '');
+
+ // Replace the element text with a marker ("~KxK" where x is its key)
+ blockText = '\n\n~K' + (globals.gHtmlBlocks.push(blockText) - 1) + 'K\n\n';
+
+ return blockText;
+ };
+});
+
+showdown.subParser('hashHTMLBlocks', function (text, options, globals) {
+ 'use strict';
+
+ var blockTags = [
+ 'pre',
+ 'div',
+ 'h1',
+ 'h2',
+ 'h3',
+ 'h4',
+ 'h5',
+ 'h6',
+ 'blockquote',
+ 'table',
+ 'dl',
+ 'ol',
+ 'ul',
+ 'script',
+ 'noscript',
+ 'form',
+ 'fieldset',
+ 'iframe',
+ 'math',
+ 'style',
+ 'section',
+ 'header',
+ 'footer',
+ 'nav',
+ 'article',
+ 'aside',
+ 'address',
+ 'audio',
+ 'canvas',
+ 'figure',
+ 'hgroup',
+ 'output',
+ 'video',
+ 'p'
+ ],
+ repFunc = function (wholeMatch, match, left, right) {
+ var txt = wholeMatch;
+ // check if this html element is marked as markdown
+ // if so, it's contents should be parsed as markdown
+ if (left.search(/\bmarkdown\b/) !== -1) {
+ txt = left + globals.converter.makeHtml(match) + right;
+ }
+ return '\n\n~K' + (globals.gHtmlBlocks.push(txt) - 1) + 'K\n\n';
+ };
+
+ for (var i = 0; i < blockTags.length; ++i) {
+ text = showdown.helper.replaceRecursiveRegExp(text, repFunc, '^(?: |\\t){0,3}<' + blockTags[i] + '\\b[^>]*>', '' + blockTags[i] + '>', 'gim');
+ }
+
+ // HR SPECIAL CASE
+ text = text.replace(/(\n[ ]{0,3}(<(hr)\b([^<>])*?\/?>)[ \t]*(?=\n{2,}))/g,
+ showdown.subParser('hashElement')(text, options, globals));
+
+ // Special case for standalone HTML comments:
+ text = text.replace(/()/g,
+ showdown.subParser('hashElement')(text, options, globals));
+
+ // PHP and ASP-style processor instructions (...?> and <%...%>)
+ text = text.replace(/(?:\n\n)([ ]{0,3}(?:<([?%])[^\r]*?\2>)[ \t]*(?=\n{2,}))/g,
+ showdown.subParser('hashElement')(text, options, globals));
+ return text;
+});
+
+/**
+ * Hash span elements that should not be parsed as markdown
+ */
+showdown.subParser('hashHTMLSpans', function (text, config, globals) {
+ 'use strict';
+
+ var matches = showdown.helper.matchRecursiveRegExp(text, ']*>', '', 'gi');
+
+ for (var i = 0; i < matches.length; ++i) {
+ text = text.replace(matches[i][0], '~L' + (globals.gHtmlSpans.push(matches[i][0]) - 1) + 'L');
+ }
+ return text;
+});
+
+/**
+ * Unhash HTML spans
+ */
+showdown.subParser('unhashHTMLSpans', function (text, config, globals) {
+ 'use strict';
+
+ for (var i = 0; i < globals.gHtmlSpans.length; ++i) {
+ text = text.replace('~L' + i + 'L', globals.gHtmlSpans[i]);
+ }
+
+ return text;
+});
+
+/**
+ * Hash span elements that should not be parsed as markdown
+ */
+showdown.subParser('hashPreCodeTags', function (text, config, globals) {
+ 'use strict';
+
+ var repFunc = function (wholeMatch, match, left, right) {
+ // encode html entities
+ var codeblock = left + showdown.subParser('encodeCode')(match) + right;
+ return '\n\n~G' + (globals.ghCodeBlocks.push({text: wholeMatch, codeblock: codeblock}) - 1) + 'G\n\n';
+ };
+
+ text = showdown.helper.replaceRecursiveRegExp(text, repFunc, '^(?: |\\t){0,3}]*>\\s*]*>', '^(?: |\\t){0,3}\\s*
', 'gim');
+ return text;
+});
+
+showdown.subParser('headers', function (text, options, globals) {
+ 'use strict';
+
+ text = globals.converter._dispatch('headers.before', text, options, globals);
+
+ var prefixHeader = options.prefixHeaderId,
+ headerLevelStart = (isNaN(parseInt(options.headerLevelStart))) ? 1 : parseInt(options.headerLevelStart),
+
+ // Set text-style headers:
+ // Header 1
+ // ========
+ //
+ // Header 2
+ // --------
+ //
+ setextRegexH1 = (options.smoothLivePreview) ? /^(.+)[ \t]*\n={2,}[ \t]*\n+/gm : /^(.+)[ \t]*\n=+[ \t]*\n+/gm,
+ setextRegexH2 = (options.smoothLivePreview) ? /^(.+)[ \t]*\n-{2,}[ \t]*\n+/gm : /^(.+)[ \t]*\n-+[ \t]*\n+/gm;
+
+ text = text.replace(setextRegexH1, function (wholeMatch, m1) {
+
+ var spanGamut = showdown.subParser('spanGamut')(m1, options, globals),
+ hID = (options.noHeaderId) ? '' : ' id="' + headerId(m1) + '"',
+ hLevel = headerLevelStart,
+ hashBlock = '' + spanGamut + ' ';
+ return showdown.subParser('hashBlock')(hashBlock, options, globals);
+ });
+
+ text = text.replace(setextRegexH2, function (matchFound, m1) {
+ var spanGamut = showdown.subParser('spanGamut')(m1, options, globals),
+ hID = (options.noHeaderId) ? '' : ' id="' + headerId(m1) + '"',
+ hLevel = headerLevelStart + 1,
+ hashBlock = '' + spanGamut + ' ';
+ return showdown.subParser('hashBlock')(hashBlock, options, globals);
+ });
+
+ // atx-style headers:
+ // # Header 1
+ // ## Header 2
+ // ## Header 2 with closing hashes ##
+ // ...
+ // ###### Header 6
+ //
+ text = text.replace(/^(#{1,6})[ \t]*(.+?)[ \t]*#*\n+/gm, function (wholeMatch, m1, m2) {
+ var span = showdown.subParser('spanGamut')(m2, options, globals),
+ hID = (options.noHeaderId) ? '' : ' id="' + headerId(m2) + '"',
+ hLevel = headerLevelStart - 1 + m1.length,
+ header = '' + span + ' ';
+
+ return showdown.subParser('hashBlock')(header, options, globals);
+ });
+
+ function headerId(m) {
+ var title, escapedId = m.replace(/[^\w]/g, '').toLowerCase();
+
+ if (globals.hashLinkCounts[escapedId]) {
+ title = escapedId + '-' + (globals.hashLinkCounts[escapedId]++);
+ } else {
+ title = escapedId;
+ globals.hashLinkCounts[escapedId] = 1;
+ }
+
+ // Prefix id to prevent causing inadvertent pre-existing style matches.
+ if (prefixHeader === true) {
+ prefixHeader = 'section';
+ }
+
+ if (showdown.helper.isString(prefixHeader)) {
+ return prefixHeader + title;
+ }
+ return title;
+ }
+
+ text = globals.converter._dispatch('headers.after', text, options, globals);
+ return text;
+});
+
+/**
+ * Turn Markdown image shortcuts into
tags.
+ */
+showdown.subParser('images', function (text, options, globals) {
+ 'use strict';
+
+ text = globals.converter._dispatch('images.before', text, options, globals);
+
+ var inlineRegExp = /!\[(.*?)]\s?\([ \t]*()(\S+?)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(['"])(.*?)\6[ \t]*)?\)/g,
+ referenceRegExp = /!\[([^\]]*?)] ?(?:\n *)?\[(.*?)]()()()()()/g;
+
+ function writeImageTag (wholeMatch, altText, linkId, url, width, height, m5, title) {
+
+ var gUrls = globals.gUrls,
+ gTitles = globals.gTitles,
+ gDims = globals.gDimensions;
+
+ linkId = linkId.toLowerCase();
+
+ if (!title) {
+ title = '';
+ }
+
+ if (url === '' || url === null) {
+ if (linkId === '' || linkId === null) {
+ // lower-case and turn embedded newlines into spaces
+ linkId = altText.toLowerCase().replace(/ ?\n/g, ' ');
+ }
+ url = '#' + linkId;
+
+ if (!showdown.helper.isUndefined(gUrls[linkId])) {
+ url = gUrls[linkId];
+ if (!showdown.helper.isUndefined(gTitles[linkId])) {
+ title = gTitles[linkId];
+ }
+ if (!showdown.helper.isUndefined(gDims[linkId])) {
+ width = gDims[linkId].width;
+ height = gDims[linkId].height;
+ }
+ } else {
+ return wholeMatch;
+ }
+ }
+
+ altText = altText.replace(/"/g, '"');
+ altText = showdown.helper.escapeCharacters(altText, '*_', false);
+ url = showdown.helper.escapeCharacters(url, '*_', false);
+ var result = '
';
+ return result;
+ }
+
+ // First, handle reference-style labeled images: ![alt text][id]
+ text = text.replace(referenceRegExp, writeImageTag);
+
+ // Next, handle inline images: 
+ text = text.replace(inlineRegExp, writeImageTag);
+
+ text = globals.converter._dispatch('images.after', text, options, globals);
+ return text;
+});
+
+showdown.subParser('italicsAndBold', function (text, options, globals) {
+ 'use strict';
+
+ text = globals.converter._dispatch('italicsAndBold.before', text, options, globals);
+
+ if (options.literalMidWordUnderscores) {
+ //underscores
+ // Since we are consuming a \s character, we need to add it
+ text = text.replace(/(^|\s|>|\b)__(?=\S)([\s\S]+?)__(?=\b|<|\s|$)/gm, '$1$2');
+ text = text.replace(/(^|\s|>|\b)_(?=\S)([\s\S]+?)_(?=\b|<|\s|$)/gm, '$1$2');
+ //asterisks
+ text = text.replace(/(\*\*)(?=\S)([^\r]*?\S[*]*)\1/g, '$2');
+ text = text.replace(/(\*)(?=\S)([^\r]*?\S)\1/g, '$2');
+
+ } else {
+ // must go first:
+ text = text.replace(/(\*\*|__)(?=\S)([^\r]*?\S[*_]*)\1/g, '$2');
+ text = text.replace(/(\*|_)(?=\S)([^\r]*?\S)\1/g, '$2');
+ }
+
+ text = globals.converter._dispatch('italicsAndBold.after', text, options, globals);
+ return text;
+});
+
+/**
+ * Form HTML ordered (numbered) and unordered (bulleted) lists.
+ */
+showdown.subParser('lists', function (text, options, globals) {
+ 'use strict';
+
+ text = globals.converter._dispatch('lists.before', text, options, globals);
+ /**
+ * Process the contents of a single ordered or unordered list, splitting it
+ * into individual list items.
+ * @param {string} listStr
+ * @param {boolean} trimTrailing
+ * @returns {string}
+ */
+ function processListItems (listStr, trimTrailing) {
+ // The $g_list_level global keeps track of when we're inside a list.
+ // Each time we enter a list, we increment it; when we leave a list,
+ // we decrement. If it's zero, we're not in a list anymore.
+ //
+ // We do this because when we're not inside a list, we want to treat
+ // something like this:
+ //
+ // I recommend upgrading to version
+ // 8. Oops, now this line is treated
+ // as a sub-list.
+ //
+ // As a single paragraph, despite the fact that the second line starts
+ // with a digit-period-space sequence.
+ //
+ // Whereas when we're inside a list (or sub-list), that line will be
+ // treated as the start of a sub-list. What a kludge, huh? This is
+ // an aspect of Markdown's syntax that's hard to parse perfectly
+ // without resorting to mind-reading. Perhaps the solution is to
+ // change the syntax rules such that sub-lists must start with a
+ // starting cardinal number; e.g. "1." or "a.".
+ globals.gListLevel++;
+
+ // trim trailing blank lines:
+ listStr = listStr.replace(/\n{2,}$/, '\n');
+
+ // attacklab: add sentinel to emulate \z
+ listStr += '~0';
+
+ var rgx = /(\n)?(^[ \t]*)([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[ \t]*[^\r]+?(\n{1,2}))(?=\n*(~0|\2([*+-]|\d+[.])[ \t]+))/gm,
+ isParagraphed = (/\n[ \t]*\n(?!~0)/.test(listStr));
+
+ listStr = listStr.replace(rgx, function (wholeMatch, m1, m2, m3, m4, taskbtn, checked) {
+ checked = (checked && checked.trim() !== '');
+ var item = showdown.subParser('outdent')(m4, options, globals),
+ bulletStyle = '';
+
+ // Support for github tasklists
+ if (taskbtn && options.tasklists) {
+ bulletStyle = ' class="task-list-item" style="list-style-type: none;"';
+ item = item.replace(/^[ \t]*\[(x|X| )?]/m, function () {
+ var otp = '';
+ return otp;
+ });
+ }
+ // m1 - Leading line or
+ // Has a double return (multi paragraph) or
+ // Has sublist
+ if (m1 || (item.search(/\n{2,}/) > -1)) {
+ item = showdown.subParser('githubCodeBlocks')(item, options, globals);
+ item = showdown.subParser('blockGamut')(item, options, globals);
+ } else {
+ // Recursion for sub-lists:
+ item = showdown.subParser('lists')(item, options, globals);
+ item = item.replace(/\n$/, ''); // chomp(item)
+ if (isParagraphed) {
+ item = showdown.subParser('paragraphs')(item, options, globals);
+ } else {
+ item = showdown.subParser('spanGamut')(item, options, globals);
+ }
+ }
+ item = '\n' + item + ' \n';
+ return item;
+ });
+
+ // attacklab: strip sentinel
+ listStr = listStr.replace(/~0/g, '');
+
+ globals.gListLevel--;
+
+ if (trimTrailing) {
+ listStr = listStr.replace(/\s+$/, '');
+ }
+
+ return listStr;
+ }
+
+ /**
+ * Check and parse consecutive lists (better fix for issue #142)
+ * @param {string} list
+ * @param {string} listType
+ * @param {boolean} trimTrailing
+ * @returns {string}
+ */
+ function parseConsecutiveLists(list, listType, trimTrailing) {
+ // check if we caught 2 or more consecutive lists by mistake
+ // we use the counterRgx, meaning if listType is UL we look for UL and vice versa
+ var counterRxg = (listType === 'ul') ? /^ {0,2}\d+\.[ \t]/gm : /^ {0,2}[*+-][ \t]/gm,
+ subLists = [],
+ result = '';
+
+ if (list.search(counterRxg) !== -1) {
+ (function parseCL(txt) {
+ var pos = txt.search(counterRxg);
+ if (pos !== -1) {
+ // slice
+ result += '\n\n<' + listType + '>' + processListItems(txt.slice(0, pos), !!trimTrailing) + '' + listType + '>\n\n';
+
+ // invert counterType and listType
+ listType = (listType === 'ul') ? 'ol' : 'ul';
+ counterRxg = (listType === 'ul') ? /^ {0,2}\d+\.[ \t]/gm : /^ {0,2}[*+-][ \t]/gm;
+
+ //recurse
+ parseCL(txt.slice(pos));
+ } else {
+ result += '\n\n<' + listType + '>' + processListItems(txt, !!trimTrailing) + '' + listType + '>\n\n';
+ }
+ })(list);
+ for (var i = 0; i < subLists.length; ++i) {
+
+ }
+ } else {
+ result = '\n\n<' + listType + '>' + processListItems(list, !!trimTrailing) + '' + listType + '>\n\n';
+ }
+
+ return result;
+ }
+
+ // attacklab: add sentinel to hack around khtml/safari bug:
+ // http://bugs.webkit.org/show_bug.cgi?id=11231
+ text += '~0';
+
+ // Re-usable pattern to match any entire ul or ol list:
+ var wholeList = /^(([ ]{0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(~0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm;
+
+ if (globals.gListLevel) {
+ text = text.replace(wholeList, function (wholeMatch, list, m2) {
+ var listType = (m2.search(/[*+-]/g) > -1) ? 'ul' : 'ol';
+ return parseConsecutiveLists(list, listType, true);
+ });
+ } else {
+ wholeList = /(\n\n|^\n?)(([ ]{0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(~0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm;
+ //wholeList = /(\n\n|^\n?)( {0,3}([*+-]|\d+\.)[ \t]+[\s\S]+?)(?=(~0)|(\n\n(?!\t| {2,}| {0,3}([*+-]|\d+\.)[ \t])))/g;
+ text = text.replace(wholeList, function (wholeMatch, m1, list, m3) {
+
+ var listType = (m3.search(/[*+-]/g) > -1) ? 'ul' : 'ol';
+ return parseConsecutiveLists(list, listType);
+ });
+ }
+
+ // attacklab: strip sentinel
+ text = text.replace(/~0/, '');
+
+ text = globals.converter._dispatch('lists.after', text, options, globals);
+ return text;
+});
+
+/**
+ * Remove one level of line-leading tabs or spaces
+ */
+showdown.subParser('outdent', function (text) {
+ 'use strict';
+
+ // attacklab: hack around Konqueror 3.5.4 bug:
+ // "----------bug".replace(/^-/g,"") == "bug"
+ text = text.replace(/^(\t|[ ]{1,4})/gm, '~0'); // attacklab: g_tab_width
+
+ // attacklab: clean up hack
+ text = text.replace(/~0/g, '');
+
+ return text;
+});
+
+/**
+ *
+ */
+showdown.subParser('paragraphs', function (text, options, globals) {
+ 'use strict';
+
+ text = globals.converter._dispatch('paragraphs.before', text, options, globals);
+ // Strip leading and trailing lines:
+ text = text.replace(/^\n+/g, '');
+ text = text.replace(/\n+$/g, '');
+
+ var grafs = text.split(/\n{2,}/g),
+ grafsOut = [],
+ end = grafs.length; // Wrap tags
+
+ for (var i = 0; i < end; i++) {
+ var str = grafs[i];
+ // if this is an HTML marker, copy it
+ if (str.search(/~(K|G)(\d+)\1/g) >= 0) {
+ grafsOut.push(str);
+ } else {
+ str = showdown.subParser('spanGamut')(str, options, globals);
+ str = str.replace(/^([ \t]*)/g, '
');
+ str += '
';
+ grafsOut.push(str);
+ }
+ }
+
+ /** Unhashify HTML blocks */
+ end = grafsOut.length;
+ for (i = 0; i < end; i++) {
+ var blockText = '',
+ grafsOutIt = grafsOut[i],
+ codeFlag = false;
+ // if this is a marker for an html block...
+ while (grafsOutIt.search(/~(K|G)(\d+)\1/) >= 0) {
+ var delim = RegExp.$1,
+ num = RegExp.$2;
+
+ if (delim === 'K') {
+ blockText = globals.gHtmlBlocks[num];
+ } else {
+ // we need to check if ghBlock is a false positive
+ if (codeFlag) {
+ // use encoded version of all text
+ blockText = showdown.subParser('encodeCode')(globals.ghCodeBlocks[num].text);
+ } else {
+ blockText = globals.ghCodeBlocks[num].codeblock;
+ }
+ }
+ blockText = blockText.replace(/\$/g, '$$$$'); // Escape any dollar signs
+
+ grafsOutIt = grafsOutIt.replace(/(\n\n)?~(K|G)\d+\2(\n\n)?/, blockText);
+ // Check if grafsOutIt is a pre->code
+ if (/^]*>\s*]*>/.test(grafsOutIt)) {
+ codeFlag = true;
+ }
+ }
+ grafsOut[i] = grafsOutIt;
+ }
+ text = grafsOut.join('\n\n');
+ // Strip leading and trailing lines:
+ text = text.replace(/^\n+/g, '');
+ text = text.replace(/\n+$/g, '');
+ return globals.converter._dispatch('paragraphs.after', text, options, globals);
+});
+
+/**
+ * Run extension
+ */
+showdown.subParser('runExtension', function (ext, text, options, globals) {
+ 'use strict';
+
+ if (ext.filter) {
+ text = ext.filter(text, globals.converter, options);
+
+ } else if (ext.regex) {
+ // TODO remove this when old extension loading mechanism is deprecated
+ var re = ext.regex;
+ if (!re instanceof RegExp) {
+ re = new RegExp(re, 'g');
+ }
+ text = text.replace(re, ext.replace);
+ }
+
+ return text;
+});
+
+/**
+ * These are all the transformations that occur *within* block-level
+ * tags like paragraphs, headers, and list items.
+ */
+showdown.subParser('spanGamut', function (text, options, globals) {
+ 'use strict';
+
+ text = globals.converter._dispatch('spanGamut.before', text, options, globals);
+ text = showdown.subParser('codeSpans')(text, options, globals);
+ text = showdown.subParser('escapeSpecialCharsWithinTagAttributes')(text, options, globals);
+ text = showdown.subParser('encodeBackslashEscapes')(text, options, globals);
+
+ // Process anchor and image tags. Images must come first,
+ // because ![foo][f] looks like an anchor.
+ text = showdown.subParser('images')(text, options, globals);
+ text = showdown.subParser('anchors')(text, options, globals);
+
+ // Make links out of things like ` `
+ // Must come after _DoAnchors(), because you can use < and >
+ // delimiters in inline links like [this]().
+ text = showdown.subParser('autoLinks')(text, options, globals);
+ text = showdown.subParser('encodeAmpsAndAngles')(text, options, globals);
+ text = showdown.subParser('italicsAndBold')(text, options, globals);
+ text = showdown.subParser('strikethrough')(text, options, globals);
+
+ // Do hard breaks:
+ text = text.replace(/ +\n/g, '
\n');
+
+ text = globals.converter._dispatch('spanGamut.after', text, options, globals);
+ return text;
+});
+
+showdown.subParser('strikethrough', function (text, options, globals) {
+ 'use strict';
+
+ if (options.strikethrough) {
+ text = globals.converter._dispatch('strikethrough.before', text, options, globals);
+ text = text.replace(/(?:~T){2}([\s\S]+?)(?:~T){2}/g, '$1');
+ text = globals.converter._dispatch('strikethrough.after', text, options, globals);
+ }
+
+ return text;
+});
+
+/**
+ * Strip any lines consisting only of spaces and tabs.
+ * This makes subsequent regexs easier to write, because we can
+ * match consecutive blank lines with /\n+/ instead of something
+ * contorted like /[ \t]*\n+/
+ */
+showdown.subParser('stripBlankLines', function (text) {
+ 'use strict';
+ return text.replace(/^[ \t]+$/mg, '');
+});
+
+/**
+ * Strips link definitions from text, stores the URLs and titles in
+ * hash references.
+ * Link defs are in the form: ^[id]: url "optional title"
+ *
+ * ^[ ]{0,3}\[(.+)\]: // id = $1 attacklab: g_tab_width - 1
+ * [ \t]*
+ * \n? // maybe *one* newline
+ * [ \t]*
+ * (\S+?)>? // url = $2
+ * [ \t]*
+ * \n? // maybe one newline
+ * [ \t]*
+ * (?:
+ * (\n*) // any lines skipped = $3 attacklab: lookbehind removed
+ * ["(]
+ * (.+?) // title = $4
+ * [")]
+ * [ \t]*
+ * )? // title is optional
+ * (?:\n+|$)
+ * /gm,
+ * function(){...});
+ *
+ */
+showdown.subParser('stripLinkDefinitions', function (text, options, globals) {
+ 'use strict';
+
+ var regex = /^ {0,3}\[(.+)]:[ \t]*\n?[ \t]*(\S+?)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n+|(?=~0))/gm;
+
+ // attacklab: sentinel workarounds for lack of \A and \Z, safari\khtml bug
+ text += '~0';
+
+ text = text.replace(regex, function (wholeMatch, linkId, url, width, height, blankLines, title) {
+ linkId = linkId.toLowerCase();
+ globals.gUrls[linkId] = showdown.subParser('encodeAmpsAndAngles')(url); // Link IDs are case-insensitive
+
+ if (blankLines) {
+ // Oops, found blank lines, so it's not a title.
+ // Put back the parenthetical statement we stole.
+ return blankLines + title;
+
+ } else {
+ if (title) {
+ globals.gTitles[linkId] = title.replace(/"|'/g, '"');
+ }
+ if (options.parseImgDimensions && width && height) {
+ globals.gDimensions[linkId] = {
+ width: width,
+ height: height
+ };
+ }
+ }
+ // Completely remove the definition from the text
+ return '';
+ });
+
+ // attacklab: strip sentinel
+ text = text.replace(/~0/, '');
+
+ return text;
+});
+
+showdown.subParser('tables', function (text, options, globals) {
+ 'use strict';
+
+ if (!options.tables) {
+ return text;
+ }
+
+ var tableRgx = /^[ \t]{0,3}\|?.+\|.+\n[ \t]{0,3}\|?[ \t]*:?[ \t]*(?:-|=){2,}[ \t]*:?[ \t]*\|[ \t]*:?[ \t]*(?:-|=){2,}[\s\S]+?(?:\n\n|~0)/gm;
+
+ function parseStyles(sLine) {
+ if (/^:[ \t]*--*$/.test(sLine)) {
+ return ' style="text-align:left;"';
+ } else if (/^--*[ \t]*:[ \t]*$/.test(sLine)) {
+ return ' style="text-align:right;"';
+ } else if (/^:[ \t]*--*[ \t]*:$/.test(sLine)) {
+ return ' style="text-align:center;"';
+ } else {
+ return '';
+ }
+ }
+
+ function parseHeaders(header, style) {
+ var id = '';
+ header = header.trim();
+ if (options.tableHeaderId) {
+ id = ' id="' + header.replace(/ /g, '_').toLowerCase() + '"';
+ }
+ header = showdown.subParser('spanGamut')(header, options, globals);
+
+ return '' + header + ' \n';
+ }
+
+ function parseCells(cell, style) {
+ var subText = showdown.subParser('spanGamut')(cell, options, globals);
+ return '' + subText + ' \n';
+ }
+
+ function buildTable(headers, cells) {
+ var tb = '\n\n\n',
+ tblLgn = headers.length;
+
+ for (var i = 0; i < tblLgn; ++i) {
+ tb += headers[i];
+ }
+ tb += ' \n\n\n';
+
+ for (i = 0; i < cells.length; ++i) {
+ tb += '\n';
+ for (var ii = 0; ii < tblLgn; ++ii) {
+ tb += cells[i][ii];
+ }
+ tb += ' \n';
+ }
+ tb += '\n
\n';
+ return tb;
+ }
+
+ text = globals.converter._dispatch('tables.before', text, options, globals);
+
+ text = text.replace(tableRgx, function (rawTable) {
+
+ var i, tableLines = rawTable.split('\n');
+
+ // strip wrong first and last column if wrapped tables are used
+ for (i = 0; i < tableLines.length; ++i) {
+ if (/^[ \t]{0,3}\|/.test(tableLines[i])) {
+ tableLines[i] = tableLines[i].replace(/^[ \t]{0,3}\|/, '');
+ }
+ if (/\|[ \t]*$/.test(tableLines[i])) {
+ tableLines[i] = tableLines[i].replace(/\|[ \t]*$/, '');
+ }
+ }
+
+ var rawHeaders = tableLines[0].split('|').map(function (s) { return s.trim();}),
+ rawStyles = tableLines[1].split('|').map(function (s) { return s.trim();}),
+ rawCells = [],
+ headers = [],
+ styles = [],
+ cells = [];
+
+ tableLines.shift();
+ tableLines.shift();
+
+ for (i = 0; i < tableLines.length; ++i) {
+ if (tableLines[i].trim() === '') {
+ continue;
+ }
+ rawCells.push(
+ tableLines[i]
+ .split('|')
+ .map(function (s) {
+ return s.trim();
+ })
+ );
+ }
+
+ if (rawHeaders.length < rawStyles.length) {
+ return rawTable;
+ }
+
+ for (i = 0; i < rawStyles.length; ++i) {
+ styles.push(parseStyles(rawStyles[i]));
+ }
+
+ for (i = 0; i < rawHeaders.length; ++i) {
+ if (showdown.helper.isUndefined(styles[i])) {
+ styles[i] = '';
+ }
+ headers.push(parseHeaders(rawHeaders[i], styles[i]));
+ }
+
+ for (i = 0; i < rawCells.length; ++i) {
+ var row = [];
+ for (var ii = 0; ii < headers.length; ++ii) {
+ if (showdown.helper.isUndefined(rawCells[i][ii])) {
+
+ }
+ row.push(parseCells(rawCells[i][ii], styles[ii]));
+ }
+ cells.push(row);
+ }
+
+ return buildTable(headers, cells);
+ });
+
+ text = globals.converter._dispatch('tables.after', text, options, globals);
+
+ return text;
+});
+
+/**
+ * Swap back in all the special characters we've hidden.
+ */
+showdown.subParser('unescapeSpecialChars', function (text) {
+ 'use strict';
+
+ text = text.replace(/~E(\d+)E/g, function (wholeMatch, m1) {
+ var charCodeToReplace = parseInt(m1);
+ return String.fromCharCode(charCodeToReplace);
+ });
+ return text;
+});
+module.exports = showdown;
diff --git a/application/routine/view/crmebN/wxParse/wxDiscode.js b/application/routine/view/crmebN/wxParse/wxDiscode.js
new file mode 100644
index 00000000..fca29bb1
--- /dev/null
+++ b/application/routine/view/crmebN/wxParse/wxDiscode.js
@@ -0,0 +1,207 @@
+// HTML 支持的数学符号
+function strNumDiscode(str){
+ str = str.replace(/∀/g, '∀');
+ str = str.replace(/∂/g, '∂');
+ str = str.replace(/&exists;/g, '∃');
+ str = str.replace(/∅/g, '∅');
+ str = str.replace(/∇/g, '∇');
+ str = str.replace(/∈/g, '∈');
+ str = str.replace(/∉/g, '∉');
+ str = str.replace(/∋/g, '∋');
+ str = str.replace(/∏/g, '∏');
+ str = str.replace(/∑/g, '∑');
+ str = str.replace(/−/g, '−');
+ str = str.replace(/∗/g, '∗');
+ str = str.replace(/√/g, '√');
+ str = str.replace(/∝/g, '∝');
+ str = str.replace(/∞/g, '∞');
+ str = str.replace(/∠/g, '∠');
+ str = str.replace(/∧/g, '∧');
+ str = str.replace(/∨/g, '∨');
+ str = str.replace(/∩/g, '∩');
+ str = str.replace(/∩/g, '∪');
+ str = str.replace(/∫/g, '∫');
+ str = str.replace(/∴/g, '∴');
+ str = str.replace(/∼/g, '∼');
+ str = str.replace(/≅/g, '≅');
+ str = str.replace(/≈/g, '≈');
+ str = str.replace(/≠/g, '≠');
+ str = str.replace(/≤/g, '≤');
+ str = str.replace(/≥/g, '≥');
+ str = str.replace(/⊂/g, '⊂');
+ str = str.replace(/⊃/g, '⊃');
+ str = str.replace(/⊄/g, '⊄');
+ str = str.replace(/⊆/g, '⊆');
+ str = str.replace(/⊇/g, '⊇');
+ str = str.replace(/⊕/g, '⊕');
+ str = str.replace(/⊗/g, '⊗');
+ str = str.replace(/⊥/g, '⊥');
+ str = str.replace(/⋅/g, '⋅');
+ return str;
+}
+
+//HTML 支持的希腊字母
+function strGreeceDiscode(str){
+ str = str.replace(/Α/g, 'Α');
+ str = str.replace(/Β/g, 'Β');
+ str = str.replace(/Γ/g, 'Γ');
+ str = str.replace(/Δ/g, 'Δ');
+ str = str.replace(/Ε/g, 'Ε');
+ str = str.replace(/Ζ/g, 'Ζ');
+ str = str.replace(/Η/g, 'Η');
+ str = str.replace(/Θ/g, 'Θ');
+ str = str.replace(/Ι/g, 'Ι');
+ str = str.replace(/Κ/g, 'Κ');
+ str = str.replace(/Λ/g, 'Λ');
+ str = str.replace(/Μ/g, 'Μ');
+ str = str.replace(/Ν/g, 'Ν');
+ str = str.replace(/Ξ/g, 'Ν');
+ str = str.replace(/Ο/g, 'Ο');
+ str = str.replace(/Π/g, 'Π');
+ str = str.replace(/Ρ/g, 'Ρ');
+ str = str.replace(/Σ/g, 'Σ');
+ str = str.replace(/Τ/g, 'Τ');
+ str = str.replace(/Υ/g, 'Υ');
+ str = str.replace(/Φ/g, 'Φ');
+ str = str.replace(/Χ/g, 'Χ');
+ str = str.replace(/Ψ/g, 'Ψ');
+ str = str.replace(/Ω/g, 'Ω');
+
+ str = str.replace(/α/g, 'α');
+ str = str.replace(/β/g, 'β');
+ str = str.replace(/γ/g, 'γ');
+ str = str.replace(/δ/g, 'δ');
+ str = str.replace(/ε/g, 'ε');
+ str = str.replace(/ζ/g, 'ζ');
+ str = str.replace(/η/g, 'η');
+ str = str.replace(/θ/g, 'θ');
+ str = str.replace(/ι/g, 'ι');
+ str = str.replace(/κ/g, 'κ');
+ str = str.replace(/λ/g, 'λ');
+ str = str.replace(/μ/g, 'μ');
+ str = str.replace(/ν/g, 'ν');
+ str = str.replace(/ξ/g, 'ξ');
+ str = str.replace(/ο/g, 'ο');
+ str = str.replace(/π/g, 'π');
+ str = str.replace(/ρ/g, 'ρ');
+ str = str.replace(/ς/g, 'ς');
+ str = str.replace(/σ/g, 'σ');
+ str = str.replace(/τ/g, 'τ');
+ str = str.replace(/υ/g, 'υ');
+ str = str.replace(/φ/g, 'φ');
+ str = str.replace(/χ/g, 'χ');
+ str = str.replace(/ψ/g, 'ψ');
+ str = str.replace(/ω/g, 'ω');
+ str = str.replace(/ϑ/g, 'ϑ');
+ str = str.replace(/ϒ/g, 'ϒ');
+ str = str.replace(/ϖ/g, 'ϖ');
+ str = str.replace(/·/g, '·');
+ return str;
+}
+
+//
+
+function strcharacterDiscode(str){
+ // 加入常用解析
+ str = str.replace(/ /g, ' ');
+ str = str.replace(/"/g, "'");
+ str = str.replace(/&/g, '&');
+ // str = str.replace(/</g, '‹');
+ // str = str.replace(/>/g, '›');
+
+ str = str.replace(/</g, '<');
+ str = str.replace(/>/g, '>');
+ str = str.replace(/•/g, '•');
+
+ return str;
+}
+
+// HTML 支持的其他实体
+function strOtherDiscode(str){
+ str = str.replace(/Œ/g, 'Œ');
+ str = str.replace(/œ/g, 'œ');
+ str = str.replace(/Š/g, 'Š');
+ str = str.replace(/š/g, 'š');
+ str = str.replace(/Ÿ/g, 'Ÿ');
+ str = str.replace(/ƒ/g, 'ƒ');
+ str = str.replace(/ˆ/g, 'ˆ');
+ str = str.replace(/˜/g, '˜');
+ str = str.replace(/ /g, '');
+ str = str.replace(/ /g, '');
+ str = str.replace(/ /g, '');
+ str = str.replace(//g, '');
+ str = str.replace(//g, '');
+ str = str.replace(//g, '');
+ str = str.replace(//g, '');
+ str = str.replace(/–/g, '–');
+ str = str.replace(/—/g, '—');
+ str = str.replace(/‘/g, '‘');
+ str = str.replace(/’/g, '’');
+ str = str.replace(/‚/g, '‚');
+ str = str.replace(/“/g, '“');
+ str = str.replace(/”/g, '”');
+ str = str.replace(/„/g, '„');
+ str = str.replace(/†/g, '†');
+ str = str.replace(/‡/g, '‡');
+ str = str.replace(/•/g, '•');
+ str = str.replace(/…/g, '…');
+ str = str.replace(/‰/g, '‰');
+ str = str.replace(/′/g, '′');
+ str = str.replace(/″/g, '″');
+ str = str.replace(/‹/g, '‹');
+ str = str.replace(/›/g, '›');
+ str = str.replace(/‾/g, '‾');
+ str = str.replace(/€/g, '€');
+ str = str.replace(/™/g, '™');
+
+ str = str.replace(/←/g, '←');
+ str = str.replace(/↑/g, '↑');
+ str = str.replace(/→/g, '→');
+ str = str.replace(/↓/g, '↓');
+ str = str.replace(/↔/g, '↔');
+ str = str.replace(/↵/g, '↵');
+ str = str.replace(/⌈/g, '⌈');
+ str = str.replace(/⌉/g, '⌉');
+
+ str = str.replace(/⌊/g, '⌊');
+ str = str.replace(/⌋/g, '⌋');
+ str = str.replace(/◊/g, '◊');
+ str = str.replace(/♠/g, '♠');
+ str = str.replace(/♣/g, '♣');
+ str = str.replace(/♥/g, '♥');
+
+ str = str.replace(/♦/g, '♦');
+ str = str.replace(/'/g, '\'');
+ return str;
+}
+
+function strMoreDiscode(str){
+ str = str.replace(/\r\n/g,"");
+ str = str.replace(/\n/g,"");
+
+ str = str.replace(/code/g,"wxxxcode-style");
+ return str;
+}
+
+function strDiscode(str){
+ str = strNumDiscode(str);
+ str = strGreeceDiscode(str);
+ str = strcharacterDiscode(str);
+ str = strOtherDiscode(str);
+ str = strMoreDiscode(str);
+ return str;
+}
+function urlToHttpUrl(url,rep){
+
+ var patt1 = new RegExp("^//");
+ var result = patt1.test(url);
+ if(result){
+ url = rep+":"+url;
+ }
+ return url;
+}
+
+module.exports = {
+ strDiscode:strDiscode,
+ urlToHttpUrl:urlToHttpUrl
+}
\ No newline at end of file
diff --git a/application/routine/view/crmebN/wxParse/wxParse.js b/application/routine/view/crmebN/wxParse/wxParse.js
new file mode 100644
index 00000000..89c1000b
--- /dev/null
+++ b/application/routine/view/crmebN/wxParse/wxParse.js
@@ -0,0 +1,157 @@
+/**
+ * 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';
+/**
+ * 配置及公有属性
+ **/
+var realWindowWidth = 0;
+var realWindowHeight = 0;
+wx.getSystemInfo({
+ success: function (res) {
+ realWindowWidth = res.windowWidth
+ realWindowHeight = res.windowHeight
+ }
+})
+/**
+ * 主函数入口区
+ **/
+function wxParse(bindName = 'wxParseData', type='html', data='数据不能为空', target,imagePadding) {
+ var that = target;
+ var transData = {};//存放转化后的数据
+ if (type == 'html') {
+ transData = HtmlToJson.html2json(data, bindName);
+ } else if (type == 'md' || type == 'markdown') {
+ var converter = new showdown.Converter();
+ var html = converter.makeHtml(data);
+ transData = HtmlToJson.html2json(html, bindName);
+ }
+ 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 || 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);
+ var index = temImages[idx].index
+ var key = `${bindName}`
+ for (var i of index.split('.')) key+=`.nodes[${i}]`
+ var keyW = key + '.width'
+ var keyH = key + '.height'
+ that.setData({
+ [keyW]: recal.imageWidth,
+ [keyH]: recal.imageheight,
+ })
+}
+
+// 计算视觉优先的图片宽高
+function wxAutoImageCal(originalWidth, originalHeight,that,bindName) {
+ //获取图片的原始长宽
+ var windowWidth = 0, windowHeight = 0;
+ var autoWidth = 0, autoHeight = 0;
+ var results = {};
+ var padding = that.data[bindName].view.imagePadding;
+ windowWidth = realWindowWidth-2*padding;
+ windowHeight = realWindowHeight;
+ //判断按照那种方式进行缩放
+ // 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
+}
+
+
diff --git a/application/routine/view/crmebN/wxParse/wxParse.wxml b/application/routine/view/crmebN/wxParse/wxParse.wxml
new file mode 100644
index 00000000..00fa5685
--- /dev/null
+++ b/application/routine/view/crmebN/wxParse/wxParse.wxml
@@ -0,0 +1,967 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.text}}
+
+
+
+
+
+
+
+
+ \n
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/application/routine/view/crmebN/wxParse/wxParse.wxss b/application/routine/view/crmebN/wxParse/wxParse.wxss
new file mode 100644
index 00000000..a9e404ed
--- /dev/null
+++ b/application/routine/view/crmebN/wxParse/wxParse.wxss
@@ -0,0 +1,206 @@
+
+/**
+ * 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
+ */
+
+.wxParse{
+ margin: 0 5px;
+ font-family: Helvetica,sans-serif;
+ font-size: 28rpx;
+ color: #666;
+ line-height: 1.8;
+}
+view{
+ word-break:break-all;
+}
+.wxParse-inline{
+ display: inline;
+ margin: 0;
+ padding: 0;
+}
+/*//标题 */
+.wxParse-div{margin: 0;padding: 0;}
+.wxParse-h1{ font-size:2em; margin: .67em 0 }
+.wxParse-h2{ font-size:1.5em; margin: .75em 0 }
+.wxParse-h3{ font-size:1.17em; margin: .83em 0 }
+.wxParse-h4{ margin: 1.12em 0}
+.wxParse-h5 { font-size:.83em; margin: 1.5em 0 }
+.wxParse-h6{ font-size:.75em; margin: 1.67em 0 }
+
+.wxParse-h1 {
+ font-size: 18px;
+ font-weight: 400;
+ margin-bottom: .9em;
+}
+.wxParse-h2 {
+ font-size: 16px;
+ font-weight: 400;
+ margin-bottom: .34em;
+}
+.wxParse-h3 {
+ font-weight: 400;
+ font-size: 15px;
+ margin-bottom: .34em;
+}
+.wxParse-h4 {
+ font-weight: 400;
+ font-size: 14px;
+ margin-bottom: .24em;
+}
+.wxParse-h5 {
+ font-weight: 400;
+ font-size: 13px;
+ margin-bottom: .14em;
+}
+.wxParse-h6 {
+ font-weight: 400;
+ font-size: 12px;
+ margin-bottom: .04em;
+}
+
+.wxParse-h1, .wxParse-h2, .wxParse-h3, .wxParse-h4, .wxParse-h5, .wxParse-h6, .wxParse-b, .wxParse-strong { font-weight: bolder }
+
+.wxParse-i,.wxParse-cite,.wxParse-em,.wxParse-var,.wxParse-address{font-style:italic}
+.wxParse-pre,.wxParse-tt,.wxParse-code,.wxParse-kbd,.wxParse-samp{font-family:monospace}
+.wxParse-pre{white-space:pre}
+.wxParse-big{font-size:1.17em}
+.wxParse-small,.wxParse-sub,.wxParse-sup{font-size:.83em}
+.wxParse-sub{vertical-align:sub}
+.wxParse-sup{vertical-align:super}
+.wxParse-s,.wxParse-strike,.wxParse-del{text-decoration:line-through}
+/*wxparse-自定义个性化的css样式*/
+/*增加video的css样式*/
+.wxParse-strong,.wxParse-s{display: inline}
+.wxParse-a{
+ color: deepskyblue;
+ word-break:break-all;
+ overflow:auto;
+}
+
+.wxParse-video{
+ text-align: center;
+ margin: 10px 0;
+}
+
+.wxParse-video-video{
+ width:100%;
+}
+
+.wxParse-img{
+ /*background-color: #efefef;*/
+ overflow: hidden;
+}
+
+.wxParse-blockquote {
+ margin: 0;
+ padding:10px 0 10px 5px;
+ font-family:Courier, Calibri,"宋体";
+ background:#f5f5f5;
+ border-left: 3px solid #dbdbdb;
+}
+
+.wxParse-code,.wxParse-wxxxcode-style{
+ display: inline;
+ background:#f5f5f5;
+}
+.wxParse-ul{
+ margin: 20rpx 10rpx;
+}
+
+.wxParse-li,.wxParse-li-inner{
+ display: flex;
+ align-items: baseline;
+ margin: 10rpx 0;
+}
+.wxParse-li-text{
+
+ align-items: center;
+ line-height: 20px;
+}
+
+.wxParse-li-circle{
+ display: inline-flex;
+ width: 5px;
+ height: 5px;
+ background-color: #333;
+ margin-right: 5px;
+}
+
+.wxParse-li-square{
+ display: inline-flex;
+ width: 10rpx;
+ height: 10rpx;
+ background-color: #333;
+ margin-right: 5px;
+}
+.wxParse-li-ring{
+ display: inline-flex;
+ width: 10rpx;
+ height: 10rpx;
+ border: 2rpx solid #333;
+ border-radius: 50%;
+ background-color: #fff;
+ margin-right: 5px;
+}
+
+/*.wxParse-table{
+ width: 100%;
+ height: 400px;
+}
+.wxParse-thead,.wxParse-tfoot,.wxParse-tr{
+ display: flex;
+ flex-direction: row;
+}
+.wxParse-th,.wxParse-td{
+ display: flex;
+ width: 580px;
+ overflow: auto;
+}*/
+
+.wxParse-u {
+ text-decoration: underline;
+}
+.wxParse-hide{
+ display: none;
+}
+.WxEmojiView{
+ align-items: center;
+}
+.wxEmoji{
+ width: 16px;
+ height:16px;
+}
+.wxParse-tr{
+ display: flex;
+ border-right:1px solid #e0e0e0;
+ border-bottom:1px solid #e0e0e0;
+ border-top:1px solid #e0e0e0;
+}
+.wxParse-th,
+.wxParse-td{
+ flex:1;
+ padding:5px;
+ font-size:28rpx;
+ border-left:1px solid #e0e0e0;
+ word-break: break-all;
+}
+.wxParse-td:last{
+ border-top:1px solid #e0e0e0;
+}
+.wxParse-th{
+ background:#f0f0f0;
+ border-top:1px solid #e0e0e0;
+}
+.wxParse-del{
+ display: inline;
+}
+.wxParse-figure {
+ overflow: hidden;
+}