222
This commit is contained in:
parent
2ab53bb895
commit
a245d1d5b4
1
App.vue
1
App.vue
|
|
@ -119,7 +119,6 @@ export default {
|
||||||
/*每个页面公共css */
|
/*每个页面公共css */
|
||||||
@import "./common/animate.css";
|
@import "./common/animate.css";
|
||||||
@import url("./common/common.css");
|
@import url("./common/common.css");
|
||||||
@import url("/components/gaoyia-parse/parse.css");
|
|
||||||
|
|
||||||
uni-tabbar {
|
uni-tabbar {
|
||||||
display: block;
|
display: block;
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ const testing = {
|
||||||
|
|
||||||
|
|
||||||
// 根据环境变量选择对应配置
|
// 根据环境变量选择对应配置
|
||||||
let currentEnv = production;//production;//testing;//production_wz;
|
let currentEnv = testing;//production;//testing;//production_wz;
|
||||||
|
|
||||||
// 判断当前环境
|
// 判断当前环境
|
||||||
// #ifdef H5
|
// #ifdef H5
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import BasePlatform from './BasePlatform.js';
|
import BasePlatform from './BasePlatform.js';
|
||||||
//#ifdef MP-WEIXIN
|
//#ifdef MP
|
||||||
import MiniProgramPlatform from './MiniProgramPlatform';
|
import MiniProgramPlatform from './MiniProgramPlatform';
|
||||||
//#endif
|
//#endif
|
||||||
//#ifdef APP-PLUS
|
//#ifdef APP-PLUS
|
||||||
|
|
@ -15,7 +15,7 @@ class PlatformFactory {
|
||||||
console.log('获取平台获取平台获取平台获取平台获取平台获取平台');
|
console.log('获取平台获取平台获取平台获取平台获取平台获取平台');
|
||||||
|
|
||||||
// 判断小程序环境
|
// 判断小程序环境
|
||||||
//#ifdef MP-WEIXIN
|
//#ifdef MP
|
||||||
return new MiniProgramPlatform();
|
return new MiniProgramPlatform();
|
||||||
//#endif
|
//#endif
|
||||||
// 判断 IOS环境
|
// 判断 IOS环境
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
//超神特效
|
//超神特效
|
||||||
//#ifdef H5 || MP-WEIXIN
|
//#ifdef H5 || MP
|
||||||
import detailLucky from "./detail-lucky-canvas.vue";
|
import detailLucky from "./detail-lucky-canvas.vue";
|
||||||
//#endif
|
//#endif
|
||||||
//#ifdef APP
|
//#ifdef APP
|
||||||
|
|
@ -60,14 +60,14 @@ export default {
|
||||||
|
|
||||||
this.prizeList = prizeList;
|
this.prizeList = prizeList;
|
||||||
this.mode = mode;
|
this.mode = mode;
|
||||||
//#ifdef H5 || MP-WEIXIN
|
//#ifdef H5 || MP
|
||||||
this.$refs._detailLucky.init(prizeList, mode);
|
this.$refs._detailLucky.init(prizeList, mode);
|
||||||
//#endif
|
//#endif
|
||||||
},
|
},
|
||||||
// 显示抽奖特效组件
|
// 显示抽奖特效组件
|
||||||
show() {
|
show() {
|
||||||
|
|
||||||
//#ifdef H5 || MP-WEIXIN
|
//#ifdef H5 || MP
|
||||||
this.$refs._detailLucky.show();
|
this.$refs._detailLucky.show();
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
|
|
@ -76,7 +76,7 @@ export default {
|
||||||
// 隐藏抽奖特效组件
|
// 隐藏抽奖特效组件
|
||||||
hide() {
|
hide() {
|
||||||
|
|
||||||
//#ifdef H5 || MP-WEIXIN
|
//#ifdef H5 || MP
|
||||||
this.$refs._detailLucky.hide();
|
this.$refs._detailLucky.hide();
|
||||||
//#endif
|
//#endif
|
||||||
},
|
},
|
||||||
|
|
@ -107,7 +107,7 @@ export default {
|
||||||
|
|
||||||
this.chaoShenIndex = chaoShenIndex;
|
this.chaoShenIndex = chaoShenIndex;
|
||||||
console.log('开始抽奖开始抽奖开始抽奖开始抽奖开始抽奖开始抽奖', this.prizeList, resultIndices,);
|
console.log('开始抽奖开始抽奖开始抽奖开始抽奖开始抽奖开始抽奖', this.prizeList, resultIndices,);
|
||||||
//#ifdef H5 || MP-WEIXIN
|
//#ifdef H5 || MP
|
||||||
await this.$refs._detailLucky.startDrawWithResult(resultIndices, chaoShenIndex);
|
await this.$refs._detailLucky.startDrawWithResult(resultIndices, chaoShenIndex);
|
||||||
//#endif
|
//#endif
|
||||||
//#ifdef APP
|
//#ifdef APP
|
||||||
|
|
|
||||||
|
|
@ -1,28 +0,0 @@
|
||||||
<template>
|
|
||||||
<!-- '<audio/>' 组件不再维护,建议使用能力更强的 'uni.createInnerAudioContext' 接口 有时间再改-->
|
|
||||||
<!--增加audio标签支持-->
|
|
||||||
<audio
|
|
||||||
:id="node.attr.id"
|
|
||||||
:class="node.classStr"
|
|
||||||
:style="node.styleStr"
|
|
||||||
:src="node.attr.src"
|
|
||||||
:loop="node.attr.loop"
|
|
||||||
:poster="node.attr.poster"
|
|
||||||
:name="node.attr.name"
|
|
||||||
:author="node.attr.author"
|
|
||||||
controls></audio>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
export default {
|
|
||||||
name: 'wxParseAudio',
|
|
||||||
props: {
|
|
||||||
node: {
|
|
||||||
type: Object,
|
|
||||||
default() {
|
|
||||||
return {};
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
@ -1,94 +0,0 @@
|
||||||
<template>
|
|
||||||
<image
|
|
||||||
:mode="node.attr.mode"
|
|
||||||
:lazy-load="node.attr.lazyLoad"
|
|
||||||
:class="node.classStr"
|
|
||||||
:style="newStyleStr || node.styleStr"
|
|
||||||
:data-src="node.attr.src"
|
|
||||||
:src="node.attr.src"
|
|
||||||
@tap="wxParseImgTap"
|
|
||||||
@load="wxParseImgLoad"
|
|
||||||
/>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
export default {
|
|
||||||
name: 'wxParseImg',
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
newStyleStr: '',
|
|
||||||
preview: true
|
|
||||||
};
|
|
||||||
},
|
|
||||||
inject: ['parseWidth'],
|
|
||||||
mounted() {},
|
|
||||||
props: {
|
|
||||||
node: {
|
|
||||||
type: Object,
|
|
||||||
default() {
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
methods: {
|
|
||||||
wxParseImgTap(e) {
|
|
||||||
if (!this.preview) return;
|
|
||||||
const { src } = e.currentTarget.dataset;
|
|
||||||
if (!src) return;
|
|
||||||
let parent = this.$parent;
|
|
||||||
while (!parent.preview || typeof parent.preview !== 'function') {
|
|
||||||
// TODO 遍历获取父节点执行方法
|
|
||||||
parent = parent.$parent;
|
|
||||||
}
|
|
||||||
parent.preview(src, e);
|
|
||||||
},
|
|
||||||
// 图片视觉宽高计算函数区
|
|
||||||
wxParseImgLoad(e) {
|
|
||||||
const { src } = e.currentTarget.dataset;
|
|
||||||
if (!src) return;
|
|
||||||
let { width, height } = e.mp.detail;
|
|
||||||
|
|
||||||
const recal = this.wxAutoImageCal(width, height);
|
|
||||||
|
|
||||||
const { imageheight, imageWidth } = recal;
|
|
||||||
const { padding, mode } = this.node.attr;//删除padding
|
|
||||||
// const { mode } = this.node.attr;
|
|
||||||
|
|
||||||
const { styleStr } = this.node;
|
|
||||||
const imageHeightStyle = mode === 'widthFix' ? '' : `height: ${imageheight}px;`;
|
|
||||||
|
|
||||||
this.newStyleStr = `${styleStr}; ${imageHeightStyle}; width: ${imageWidth}px; padding: 0 ${+padding}px;`;//删除padding
|
|
||||||
// this.newStyleStr = `${styleStr}; ${imageHeightStyle}; width: ${imageWidth}px;`;
|
|
||||||
},
|
|
||||||
// 计算视觉优先的图片宽高
|
|
||||||
wxAutoImageCal(originalWidth, originalHeight) {
|
|
||||||
// 获取图片的原始长宽
|
|
||||||
const windowWidth = this.parseWidth.value;
|
|
||||||
const results = {};
|
|
||||||
|
|
||||||
if (originalWidth < 60 || originalHeight < 60) {
|
|
||||||
const { src } = this.node.attr;
|
|
||||||
let parent = this.$parent;
|
|
||||||
while (!parent.preview || typeof parent.preview !== 'function') {
|
|
||||||
parent = parent.$parent;
|
|
||||||
}
|
|
||||||
parent.removeImageUrl(src);
|
|
||||||
this.preview = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 判断按照那种方式进行缩放
|
|
||||||
if (originalWidth > windowWidth) {
|
|
||||||
// 在图片width大于手机屏幕width时候
|
|
||||||
results.imageWidth = windowWidth;
|
|
||||||
results.imageheight = windowWidth * (originalHeight / originalWidth);
|
|
||||||
} else {
|
|
||||||
// 否则展示原来的数据
|
|
||||||
results.imageWidth = originalWidth;
|
|
||||||
results.imageheight = originalHeight;
|
|
||||||
}
|
|
||||||
return results;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
@ -1,55 +0,0 @@
|
||||||
<template>
|
|
||||||
<div class='tablebox'>
|
|
||||||
<rich-text :nodes="nodes" :class="node.classStr" :style="'user-select:' + parseSelect"></rich-text>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<script>
|
|
||||||
export default {
|
|
||||||
name: 'wxParseTable',
|
|
||||||
props: {
|
|
||||||
node: {
|
|
||||||
type: Object,
|
|
||||||
default() {
|
|
||||||
return {};
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
inject: ['parseSelect'],
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
nodes:[]
|
|
||||||
};
|
|
||||||
},
|
|
||||||
mounted() {
|
|
||||||
this.nodes=this.loadNode([this.node]);
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
loadNode(node) {
|
|
||||||
let obj = [];
|
|
||||||
for (let children of node) {
|
|
||||||
if (children.node=='element') {
|
|
||||||
let t = {
|
|
||||||
name:children.tag,
|
|
||||||
attrs: {
|
|
||||||
class: children.classStr,
|
|
||||||
// style: children.styleStr,
|
|
||||||
},
|
|
||||||
children: children.nodes?this.loadNode(children.nodes):[]
|
|
||||||
}
|
|
||||||
|
|
||||||
obj.push(t)
|
|
||||||
} else if(children.node=='text'){
|
|
||||||
obj.push({
|
|
||||||
type: 'text',
|
|
||||||
text: children.text
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return obj
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
<style>
|
|
||||||
@import url("../parse.css");
|
|
||||||
</style>
|
|
||||||
|
|
@ -1,98 +0,0 @@
|
||||||
<template>
|
|
||||||
<!--判断是否是标签节点-->
|
|
||||||
<block v-if="node.node == 'element'">
|
|
||||||
<!--button类型-->
|
|
||||||
<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
|
|
||||||
<wx-parse-template :node="node" />
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<!--a类型-->
|
|
||||||
<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
|
|
||||||
<block v-for="(node, index) of node.nodes" :key="index">
|
|
||||||
<wx-parse-template :node="node" />
|
|
||||||
</block>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<!--li类型-->
|
|
||||||
<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
|
|
||||||
<block v-for="(node, index) of node.nodes" :key="index">
|
|
||||||
<wx-parse-template :node="node" />
|
|
||||||
</block>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<!--table类型-->
|
|
||||||
<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
|
|
||||||
|
|
||||||
<!--br类型-->
|
|
||||||
<!-- #ifndef H5 -->
|
|
||||||
<text v-else-if="node.tag == 'br'">\n</text>
|
|
||||||
<!-- #endif -->
|
|
||||||
<!-- #ifdef H5 -->
|
|
||||||
<br v-else-if="node.tag == 'br'">
|
|
||||||
<!-- #endif -->
|
|
||||||
|
|
||||||
<!--video类型-->
|
|
||||||
<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
|
|
||||||
|
|
||||||
<!--audio类型-->
|
|
||||||
<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
|
|
||||||
|
|
||||||
<!--img类型-->
|
|
||||||
<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
|
|
||||||
|
|
||||||
<!--其他标签-->
|
|
||||||
<view v-else :class="node.classStr" :style="node.styleStr">
|
|
||||||
<block v-for="(node, index) of node.nodes" :key="index">
|
|
||||||
<wx-parse-template :node="node"/>
|
|
||||||
</block>
|
|
||||||
</view>
|
|
||||||
</block>
|
|
||||||
|
|
||||||
<!--判断是否是文本节点-->
|
|
||||||
<block v-else-if="node.node == 'text'">{{node.text}}</block>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
// #ifdef APP-PLUS | H5
|
|
||||||
import wxParseTemplate from './wxParseTemplate0';
|
|
||||||
// #endif
|
|
||||||
// #ifdef MP
|
|
||||||
import wxParseTemplate from './wxParseTemplate1';
|
|
||||||
// #endif
|
|
||||||
import wxParseImg from './wxParseImg';
|
|
||||||
import wxParseVideo from './wxParseVideo';
|
|
||||||
import wxParseAudio from './wxParseAudio';
|
|
||||||
import wxParseTable from './wxParseTable';
|
|
||||||
|
|
||||||
export default {
|
|
||||||
// #ifdef APP-PLUS | H5
|
|
||||||
name: 'wxParseTemplate',
|
|
||||||
// #endif
|
|
||||||
// #ifdef MP
|
|
||||||
name: 'wxParseTemplate0',
|
|
||||||
// #endif
|
|
||||||
props: {
|
|
||||||
node: {},
|
|
||||||
},
|
|
||||||
components: {
|
|
||||||
wxParseTemplate,
|
|
||||||
wxParseImg,
|
|
||||||
wxParseVideo,
|
|
||||||
wxParseAudio,
|
|
||||||
wxParseTable
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
wxParseATap(attr,e) {
|
|
||||||
const {
|
|
||||||
href
|
|
||||||
} = e.currentTarget.dataset;// TODO currentTarget才有dataset
|
|
||||||
if (!href) return;
|
|
||||||
let parent = this.$parent;
|
|
||||||
while(!parent.preview || typeof parent.preview !== 'function') {// TODO 遍历获取父节点执行方法
|
|
||||||
parent = parent.$parent;
|
|
||||||
}
|
|
||||||
parent.navigate(href, e, attr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
@ -1,88 +0,0 @@
|
||||||
<template>
|
|
||||||
<!--判断是否是标签节点-->
|
|
||||||
<block v-if="node.node == 'element'">
|
|
||||||
<!--button类型-->
|
|
||||||
<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
|
|
||||||
<wx-parse-template :node="node" />
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<!--a类型-->
|
|
||||||
<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
|
|
||||||
<block v-for="(node, index) of node.nodes" :key="index">
|
|
||||||
<wx-parse-template :node="node" />
|
|
||||||
</block>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<!--li类型-->
|
|
||||||
<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
|
|
||||||
<block v-for="(node, index) of node.nodes" :key="index">
|
|
||||||
<wx-parse-template :node="node" />
|
|
||||||
</block>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<!--table类型-->
|
|
||||||
<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
|
|
||||||
|
|
||||||
<!--br类型-->
|
|
||||||
<!-- #ifndef H5 -->
|
|
||||||
<text v-else-if="node.tag == 'br'">\n</text>
|
|
||||||
<!-- #endif -->
|
|
||||||
<!-- #ifdef H5 -->
|
|
||||||
<br v-else-if="node.tag == 'br'">
|
|
||||||
<!-- #endif -->
|
|
||||||
|
|
||||||
<!--video类型-->
|
|
||||||
<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
|
|
||||||
|
|
||||||
<!--audio类型-->
|
|
||||||
<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
|
|
||||||
|
|
||||||
<!--img类型-->
|
|
||||||
<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
|
|
||||||
|
|
||||||
<!--其他标签-->
|
|
||||||
<view v-else :class="node.classStr" :style="node.styleStr">
|
|
||||||
<block v-for="(node, index) of node.nodes" :key="index">
|
|
||||||
<wx-parse-template :node="node" />
|
|
||||||
</block>
|
|
||||||
</view>
|
|
||||||
</block>
|
|
||||||
|
|
||||||
<!--判断是否是文本节点-->
|
|
||||||
<block v-else-if="node.node == 'text'">{{node.text}}</block>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import wxParseTemplate from './wxParseTemplate2';
|
|
||||||
import wxParseImg from './wxParseImg';
|
|
||||||
import wxParseVideo from './wxParseVideo';
|
|
||||||
import wxParseAudio from './wxParseAudio';
|
|
||||||
import wxParseTable from './wxParseTable';
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: 'wxParseTemplate1',
|
|
||||||
props: {
|
|
||||||
node: {},
|
|
||||||
},
|
|
||||||
components: {
|
|
||||||
wxParseTemplate,
|
|
||||||
wxParseImg,
|
|
||||||
wxParseVideo,
|
|
||||||
wxParseAudio,
|
|
||||||
wxParseTable
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
wxParseATap(attr,e) {
|
|
||||||
const {
|
|
||||||
href
|
|
||||||
} = e.currentTarget.dataset;
|
|
||||||
if (!href) return;
|
|
||||||
let parent = this.$parent;
|
|
||||||
while(!parent.preview || typeof parent.preview !== 'function') {
|
|
||||||
parent = parent.$parent;
|
|
||||||
}
|
|
||||||
parent.navigate(href, e, attr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
@ -1,88 +0,0 @@
|
||||||
<template>
|
|
||||||
<!--判断是否是标签节点-->
|
|
||||||
<block v-if="node.node == 'element'">
|
|
||||||
<!--button类型-->
|
|
||||||
<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
|
|
||||||
<wx-parse-template :node="node" />
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<!--a类型-->
|
|
||||||
<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
|
|
||||||
<block v-for="(node, index) of node.nodes" :key="index">
|
|
||||||
<wx-parse-template :node="node" />
|
|
||||||
</block>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<!--li类型-->
|
|
||||||
<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
|
|
||||||
<block v-for="(node, index) of node.nodes" :key="index">
|
|
||||||
<wx-parse-template :node="node" />
|
|
||||||
</block>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<!--table类型-->
|
|
||||||
<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
|
|
||||||
|
|
||||||
<!--br类型-->
|
|
||||||
<!-- #ifndef H5 -->
|
|
||||||
<text v-else-if="node.tag == 'br'">\n</text>
|
|
||||||
<!-- #endif -->
|
|
||||||
<!-- #ifdef H5 -->
|
|
||||||
<br v-else-if="node.tag == 'br'">
|
|
||||||
<!-- #endif -->
|
|
||||||
|
|
||||||
<!--video类型-->
|
|
||||||
<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
|
|
||||||
|
|
||||||
<!--audio类型-->
|
|
||||||
<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
|
|
||||||
|
|
||||||
<!--img类型-->
|
|
||||||
<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
|
|
||||||
|
|
||||||
<!--其他标签-->
|
|
||||||
<view v-else :class="node.classStr" :style="node.styleStr">
|
|
||||||
<block v-for="(node, index) of node.nodes" :key="index">
|
|
||||||
<wx-parse-template :node="node" />
|
|
||||||
</block>
|
|
||||||
</view>
|
|
||||||
</block>
|
|
||||||
|
|
||||||
<!--判断是否是文本节点-->
|
|
||||||
<block v-else-if="node.node == 'text' ">{{node.text}}</block>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import wxParseTemplate from './wxParseTemplate11';
|
|
||||||
import wxParseImg from './wxParseImg';
|
|
||||||
import wxParseVideo from './wxParseVideo';
|
|
||||||
import wxParseAudio from './wxParseAudio';
|
|
||||||
import wxParseTable from './wxParseTable';
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: 'wxParseTemplate10',
|
|
||||||
props: {
|
|
||||||
node: {},
|
|
||||||
},
|
|
||||||
components: {
|
|
||||||
wxParseTemplate,
|
|
||||||
wxParseImg,
|
|
||||||
wxParseVideo,
|
|
||||||
wxParseAudio,
|
|
||||||
wxParseTable
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
wxParseATap(attr,e) {
|
|
||||||
const {
|
|
||||||
href
|
|
||||||
} = e.currentTarget.dataset;
|
|
||||||
if (!href) return;
|
|
||||||
let parent = this.$parent;
|
|
||||||
while(!parent.preview || typeof parent.preview !== 'function') {
|
|
||||||
parent = parent.$parent;
|
|
||||||
}
|
|
||||||
parent.navigate(href, e, attr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
@ -1,86 +0,0 @@
|
||||||
<template>
|
|
||||||
<!--判断是否是标签节点-->
|
|
||||||
<block v-if="node.node == 'element'">
|
|
||||||
<!--button类型-->
|
|
||||||
<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
|
|
||||||
<rich-text :nodes="node" :class="node.classStr" :style="'user-select:' + parseSelect"></rich-text>
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<!--a类型-->
|
|
||||||
<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
|
|
||||||
<block v-for="(node, index) of node.nodes" :key="index">
|
|
||||||
<rich-text :nodes="node" :class="node.classStr" :style="'user-select:' + parseSelect"></rich-text>
|
|
||||||
</block>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<!--li类型-->
|
|
||||||
<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
|
|
||||||
<block v-for="(node, index) of node.nodes" :key="index">
|
|
||||||
<rich-text :nodes="node" :class="node.classStr" :style="'user-select:' + parseSelect"></rich-text>
|
|
||||||
</block>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<!--table类型-->
|
|
||||||
<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
|
|
||||||
|
|
||||||
<!--br类型-->
|
|
||||||
<!-- #ifndef H5 -->
|
|
||||||
<text v-else-if="node.tag == 'br'">\n</text>
|
|
||||||
<!-- #endif -->
|
|
||||||
<!-- #ifdef H5 -->
|
|
||||||
<br v-else-if="node.tag == 'br'">
|
|
||||||
<!-- #endif -->
|
|
||||||
|
|
||||||
<!--video类型-->
|
|
||||||
<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
|
|
||||||
|
|
||||||
<!--audio类型-->
|
|
||||||
<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
|
|
||||||
|
|
||||||
<!--img类型-->
|
|
||||||
<wx-parse-img :node="node" v-else-if="node.tag == 'img'"/>
|
|
||||||
|
|
||||||
<!--其他标签-->
|
|
||||||
<view v-else :class="node.classStr" :style="node.styleStr">
|
|
||||||
<block v-for="(node, index) of node.nodes" :key="index">
|
|
||||||
<rich-text :nodes="node" :class="node.classStr" :style="'user-select:' + parseSelect"></rich-text>
|
|
||||||
</block>
|
|
||||||
</view>
|
|
||||||
</block>
|
|
||||||
|
|
||||||
<!--判断是否是文本节点-->
|
|
||||||
<block v-else-if="node.node == 'text' ">{{node.text}}</block>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import wxParseImg from './wxParseImg';
|
|
||||||
import wxParseVideo from './wxParseVideo';
|
|
||||||
import wxParseAudio from './wxParseAudio';
|
|
||||||
import wxParseTable from './wxParseTable';
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: 'wxParseTemplate11',
|
|
||||||
props: {
|
|
||||||
node: {},
|
|
||||||
},
|
|
||||||
components: {
|
|
||||||
wxParseImg,
|
|
||||||
wxParseVideo,
|
|
||||||
wxParseAudio,
|
|
||||||
wxParseTable
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
wxParseATap(attr,e) {
|
|
||||||
const {
|
|
||||||
href
|
|
||||||
} = e.currentTarget.dataset;
|
|
||||||
if (!href) return;
|
|
||||||
let parent = this.$parent;
|
|
||||||
while(!parent.preview || typeof parent.preview !== 'function') {
|
|
||||||
parent = parent.$parent;
|
|
||||||
}
|
|
||||||
parent.navigate(href, e, attr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
@ -1,88 +0,0 @@
|
||||||
<template>
|
|
||||||
<!--判断是否是标签节点-->
|
|
||||||
<block v-if="node.node == 'element'">
|
|
||||||
<!--button类型-->
|
|
||||||
<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
|
|
||||||
<wx-parse-template :node="node" />
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<!--a类型-->
|
|
||||||
<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
|
|
||||||
<block v-for="(node, index) of node.nodes" :key="index">
|
|
||||||
<wx-parse-template :node="node" />
|
|
||||||
</block>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<!--li类型-->
|
|
||||||
<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
|
|
||||||
<block v-for="(node, index) of node.nodes" :key="index">
|
|
||||||
<wx-parse-template :node="node" />
|
|
||||||
</block>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<!--table类型-->
|
|
||||||
<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
|
|
||||||
|
|
||||||
<!--br类型-->
|
|
||||||
<!-- #ifndef H5 -->
|
|
||||||
<text v-else-if="node.tag == 'br'">\n</text>
|
|
||||||
<!-- #endif -->
|
|
||||||
<!-- #ifdef H5 -->
|
|
||||||
<br v-else-if="node.tag == 'br'">
|
|
||||||
<!-- #endif -->
|
|
||||||
|
|
||||||
<!--video类型-->
|
|
||||||
<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
|
|
||||||
|
|
||||||
<!--audio类型-->
|
|
||||||
<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
|
|
||||||
|
|
||||||
<!--img类型-->
|
|
||||||
<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
|
|
||||||
|
|
||||||
<!--其他标签-->
|
|
||||||
<view v-else :class="node.classStr" :style="node.styleStr">
|
|
||||||
<block v-for="(node, index) of node.nodes" :key="index">
|
|
||||||
<wx-parse-template :node="node" />
|
|
||||||
</block>
|
|
||||||
</view>
|
|
||||||
</block>
|
|
||||||
|
|
||||||
<!--判断是否是文本节点-->
|
|
||||||
<block v-else-if="node.node == 'text'">{{node.text}}</block>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import wxParseTemplate from './wxParseTemplate3';
|
|
||||||
import wxParseImg from './wxParseImg';
|
|
||||||
import wxParseVideo from './wxParseVideo';
|
|
||||||
import wxParseAudio from './wxParseAudio';
|
|
||||||
import wxParseTable from './wxParseTable';
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: 'wxParseTemplate2',
|
|
||||||
props: {
|
|
||||||
node: {},
|
|
||||||
},
|
|
||||||
components: {
|
|
||||||
wxParseTemplate,
|
|
||||||
wxParseImg,
|
|
||||||
wxParseVideo,
|
|
||||||
wxParseAudio,
|
|
||||||
wxParseTable
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
wxParseATap(attr,e) {
|
|
||||||
const {
|
|
||||||
href
|
|
||||||
} = e.currentTarget.dataset;
|
|
||||||
if (!href) return;
|
|
||||||
let parent = this.$parent;
|
|
||||||
while(!parent.preview || typeof parent.preview !== 'function') {
|
|
||||||
parent = parent.$parent;
|
|
||||||
}
|
|
||||||
parent.navigate(href, e, attr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
@ -1,88 +0,0 @@
|
||||||
<template>
|
|
||||||
<!--判断是否是标签节点-->
|
|
||||||
<block v-if="node.node == 'element'">
|
|
||||||
<!--button类型-->
|
|
||||||
<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
|
|
||||||
<wx-parse-template :node="node" />
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<!--a类型-->
|
|
||||||
<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
|
|
||||||
<block v-for="(node, index) of node.nodes" :key="index">
|
|
||||||
<wx-parse-template :node="node" />
|
|
||||||
</block>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<!--li类型-->
|
|
||||||
<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
|
|
||||||
<block v-for="(node, index) of node.nodes" :key="index">
|
|
||||||
<wx-parse-template :node="node" />
|
|
||||||
</block>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<!--table类型-->
|
|
||||||
<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
|
|
||||||
|
|
||||||
<!--br类型-->
|
|
||||||
<!-- #ifndef H5 -->
|
|
||||||
<text v-else-if="node.tag == 'br'">\n</text>
|
|
||||||
<!-- #endif -->
|
|
||||||
<!-- #ifdef H5 -->
|
|
||||||
<br v-else-if="node.tag == 'br'">
|
|
||||||
<!-- #endif -->
|
|
||||||
|
|
||||||
<!--video类型-->
|
|
||||||
<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
|
|
||||||
|
|
||||||
<!--audio类型-->
|
|
||||||
<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
|
|
||||||
|
|
||||||
<!--img类型-->
|
|
||||||
<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
|
|
||||||
|
|
||||||
<!--其他标签-->
|
|
||||||
<view v-else :class="node.classStr" :style="node.styleStr">
|
|
||||||
<block v-for="(node, index) of node.nodes" :key="index">
|
|
||||||
<wx-parse-template :node="node" />
|
|
||||||
</block>
|
|
||||||
</view>
|
|
||||||
</block>
|
|
||||||
|
|
||||||
<!--判断是否是文本节点-->
|
|
||||||
<block v-else-if="node.node == 'text' ">{{node.text}}</block>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import wxParseTemplate from './wxParseTemplate4';
|
|
||||||
import wxParseImg from './wxParseImg';
|
|
||||||
import wxParseVideo from './wxParseVideo';
|
|
||||||
import wxParseAudio from './wxParseAudio';
|
|
||||||
import wxParseTable from './wxParseTable';
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: 'wxParseTemplate3',
|
|
||||||
props: {
|
|
||||||
node: {},
|
|
||||||
},
|
|
||||||
components: {
|
|
||||||
wxParseTemplate,
|
|
||||||
wxParseImg,
|
|
||||||
wxParseVideo,
|
|
||||||
wxParseAudio,
|
|
||||||
wxParseTable
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
wxParseATap(attr,e) {
|
|
||||||
const {
|
|
||||||
href
|
|
||||||
} = e.currentTarget.dataset;
|
|
||||||
if (!href) return;
|
|
||||||
let parent = this.$parent;
|
|
||||||
while(!parent.preview || typeof parent.preview !== 'function') {
|
|
||||||
parent = parent.$parent;
|
|
||||||
}
|
|
||||||
parent.navigate(href, e, attr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
@ -1,88 +0,0 @@
|
||||||
<template>
|
|
||||||
<!--判断是否是标签节点-->
|
|
||||||
<block v-if="node.node == 'element'">
|
|
||||||
<!--button类型-->
|
|
||||||
<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
|
|
||||||
<wx-parse-template :node="node" />
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<!--a类型-->
|
|
||||||
<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
|
|
||||||
<block v-for="(node, index) of node.nodes" :key="index">
|
|
||||||
<wx-parse-template :node="node" />
|
|
||||||
</block>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<!--li类型-->
|
|
||||||
<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
|
|
||||||
<block v-for="(node, index) of node.nodes" :key="index">
|
|
||||||
<wx-parse-template :node="node" />
|
|
||||||
</block>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<!--table类型-->
|
|
||||||
<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
|
|
||||||
|
|
||||||
<!--br类型-->
|
|
||||||
<!-- #ifndef H5 -->
|
|
||||||
<text v-else-if="node.tag == 'br'">\n</text>
|
|
||||||
<!-- #endif -->
|
|
||||||
<!-- #ifdef H5 -->
|
|
||||||
<br v-else-if="node.tag == 'br'">
|
|
||||||
<!-- #endif -->
|
|
||||||
|
|
||||||
<!--video类型-->
|
|
||||||
<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
|
|
||||||
|
|
||||||
<!--audio类型-->
|
|
||||||
<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
|
|
||||||
|
|
||||||
<!--img类型-->
|
|
||||||
<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
|
|
||||||
|
|
||||||
<!--其他标签-->
|
|
||||||
<view v-else :class="node.classStr" :style="node.styleStr">
|
|
||||||
<block v-for="(node, index) of node.nodes" :key="index">
|
|
||||||
<wx-parse-template :node="node" />
|
|
||||||
</block>
|
|
||||||
</view>
|
|
||||||
</block>
|
|
||||||
|
|
||||||
<!--判断是否是文本节点-->
|
|
||||||
<block v-else-if="node.node == 'text' ">{{node.text}}</block>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import wxParseTemplate from './wxParseTemplate5';
|
|
||||||
import wxParseImg from './wxParseImg';
|
|
||||||
import wxParseVideo from './wxParseVideo';
|
|
||||||
import wxParseAudio from './wxParseAudio';
|
|
||||||
import wxParseTable from './wxParseTable';
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: 'wxParseTemplate4',
|
|
||||||
props: {
|
|
||||||
node: {},
|
|
||||||
},
|
|
||||||
components: {
|
|
||||||
wxParseTemplate,
|
|
||||||
wxParseImg,
|
|
||||||
wxParseVideo,
|
|
||||||
wxParseAudio,
|
|
||||||
wxParseTable
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
wxParseATap(attr,e) {
|
|
||||||
const {
|
|
||||||
href
|
|
||||||
} = e.currentTarget.dataset;
|
|
||||||
if (!href) return;
|
|
||||||
let parent = this.$parent;
|
|
||||||
while(!parent.preview || typeof parent.preview !== 'function') {
|
|
||||||
parent = parent.$parent;
|
|
||||||
}
|
|
||||||
parent.navigate(href, e, attr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
@ -1,88 +0,0 @@
|
||||||
<template>
|
|
||||||
<!--判断是否是标签节点-->
|
|
||||||
<block v-if="node.node == 'element'">
|
|
||||||
<!--button类型-->
|
|
||||||
<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
|
|
||||||
<wx-parse-template :node="node" />
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<!--a类型-->
|
|
||||||
<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
|
|
||||||
<block v-for="(node, index) of node.nodes" :key="index">
|
|
||||||
<wx-parse-template :node="node" />
|
|
||||||
</block>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<!--li类型-->
|
|
||||||
<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
|
|
||||||
<block v-for="(node, index) of node.nodes" :key="index">
|
|
||||||
<wx-parse-template :node="node" />
|
|
||||||
</block>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<!--table类型-->
|
|
||||||
<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
|
|
||||||
|
|
||||||
<!--br类型-->
|
|
||||||
<!-- #ifndef H5 -->
|
|
||||||
<text v-else-if="node.tag == 'br'">\n</text>
|
|
||||||
<!-- #endif -->
|
|
||||||
<!-- #ifdef H5 -->
|
|
||||||
<br v-else-if="node.tag == 'br'">
|
|
||||||
<!-- #endif -->
|
|
||||||
|
|
||||||
<!--video类型-->
|
|
||||||
<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
|
|
||||||
|
|
||||||
<!--audio类型-->
|
|
||||||
<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
|
|
||||||
|
|
||||||
<!--img类型-->
|
|
||||||
<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
|
|
||||||
|
|
||||||
<!--其他标签-->
|
|
||||||
<view v-else :class="node.classStr" :style="node.styleStr">
|
|
||||||
<block v-for="(node, index) of node.nodes" :key="index">
|
|
||||||
<wx-parse-template :node="node" />
|
|
||||||
</block>
|
|
||||||
</view>
|
|
||||||
</block>
|
|
||||||
|
|
||||||
<!--判断是否是文本节点-->
|
|
||||||
<block v-else-if="node.node == 'text' ">{{node.text}}</block>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import wxParseTemplate from './wxParseTemplate6';
|
|
||||||
import wxParseImg from './wxParseImg';
|
|
||||||
import wxParseVideo from './wxParseVideo';
|
|
||||||
import wxParseAudio from './wxParseAudio';
|
|
||||||
import wxParseTable from './wxParseTable';
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: 'wxParseTemplate5',
|
|
||||||
props: {
|
|
||||||
node: {},
|
|
||||||
},
|
|
||||||
components: {
|
|
||||||
wxParseTemplate,
|
|
||||||
wxParseImg,
|
|
||||||
wxParseVideo,
|
|
||||||
wxParseAudio,
|
|
||||||
wxParseTable
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
wxParseATap(attr,e) {
|
|
||||||
const {
|
|
||||||
href
|
|
||||||
} = e.currentTarget.dataset;
|
|
||||||
if (!href) return;
|
|
||||||
let parent = this.$parent;
|
|
||||||
while(!parent.preview || typeof parent.preview !== 'function') {
|
|
||||||
parent = parent.$parent;
|
|
||||||
}
|
|
||||||
parent.navigate(href, e, attr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
@ -1,88 +0,0 @@
|
||||||
<template>
|
|
||||||
<!--判断是否是标签节点-->
|
|
||||||
<block v-if="node.node == 'element'">
|
|
||||||
<!--button类型-->
|
|
||||||
<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
|
|
||||||
<wx-parse-template :node="node" />
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<!--a类型-->
|
|
||||||
<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
|
|
||||||
<block v-for="(node, index) of node.nodes" :key="index">
|
|
||||||
<wx-parse-template :node="node" />
|
|
||||||
</block>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<!--li类型-->
|
|
||||||
<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
|
|
||||||
<block v-for="(node, index) of node.nodes" :key="index">
|
|
||||||
<wx-parse-template :node="node" />
|
|
||||||
</block>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<!--table类型-->
|
|
||||||
<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
|
|
||||||
|
|
||||||
<!--br类型-->
|
|
||||||
<!-- #ifndef H5 -->
|
|
||||||
<text v-else-if="node.tag == 'br'">\n</text>
|
|
||||||
<!-- #endif -->
|
|
||||||
<!-- #ifdef H5 -->
|
|
||||||
<br v-else-if="node.tag == 'br'">
|
|
||||||
<!-- #endif -->
|
|
||||||
|
|
||||||
<!--video类型-->
|
|
||||||
<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
|
|
||||||
|
|
||||||
<!--audio类型-->
|
|
||||||
<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
|
|
||||||
|
|
||||||
<!--img类型-->
|
|
||||||
<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
|
|
||||||
|
|
||||||
<!--其他标签-->
|
|
||||||
<view v-else :class="node.classStr" :style="node.styleStr">
|
|
||||||
<block v-for="(node, index) of node.nodes" :key="index">
|
|
||||||
<wx-parse-template :node="node" />
|
|
||||||
</block>
|
|
||||||
</view>
|
|
||||||
</block>
|
|
||||||
|
|
||||||
<!--判断是否是文本节点-->
|
|
||||||
<block v-else-if="node.node == 'text' ">{{node.text}}</block>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import wxParseTemplate from './wxParseTemplate7';
|
|
||||||
import wxParseImg from './wxParseImg';
|
|
||||||
import wxParseVideo from './wxParseVideo';
|
|
||||||
import wxParseAudio from './wxParseAudio';
|
|
||||||
import wxParseTable from './wxParseTable';
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: 'wxParseTemplate6',
|
|
||||||
props: {
|
|
||||||
node: {},
|
|
||||||
},
|
|
||||||
components: {
|
|
||||||
wxParseTemplate,
|
|
||||||
wxParseImg,
|
|
||||||
wxParseVideo,
|
|
||||||
wxParseAudio,
|
|
||||||
wxParseTable
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
wxParseATap(attr,e) {
|
|
||||||
const {
|
|
||||||
href
|
|
||||||
} = e.currentTarget.dataset;
|
|
||||||
if (!href) return;
|
|
||||||
let parent = this.$parent;
|
|
||||||
while(!parent.preview || typeof parent.preview !== 'function') {
|
|
||||||
parent = parent.$parent;
|
|
||||||
}
|
|
||||||
parent.navigate(href, e, attr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
@ -1,88 +0,0 @@
|
||||||
<template>
|
|
||||||
<!--判断是否是标签节点-->
|
|
||||||
<block v-if="node.node == 'element'">
|
|
||||||
<!--button类型-->
|
|
||||||
<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
|
|
||||||
<wx-parse-template :node="node" />
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<!--a类型-->
|
|
||||||
<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
|
|
||||||
<block v-for="(node, index) of node.nodes" :key="index">
|
|
||||||
<wx-parse-template :node="node" />
|
|
||||||
</block>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<!--li类型-->
|
|
||||||
<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
|
|
||||||
<block v-for="(node, index) of node.nodes" :key="index">
|
|
||||||
<wx-parse-template :node="node" />
|
|
||||||
</block>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<!--table类型-->
|
|
||||||
<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
|
|
||||||
|
|
||||||
<!--br类型-->
|
|
||||||
<!-- #ifndef H5 -->
|
|
||||||
<text v-else-if="node.tag == 'br'">\n</text>
|
|
||||||
<!-- #endif -->
|
|
||||||
<!-- #ifdef H5 -->
|
|
||||||
<br v-else-if="node.tag == 'br'">
|
|
||||||
<!-- #endif -->
|
|
||||||
|
|
||||||
<!--video类型-->
|
|
||||||
<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
|
|
||||||
|
|
||||||
<!--audio类型-->
|
|
||||||
<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
|
|
||||||
|
|
||||||
<!--img类型-->
|
|
||||||
<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
|
|
||||||
|
|
||||||
<!--其他标签-->
|
|
||||||
<view v-else :class="node.classStr" :style="node.styleStr">
|
|
||||||
<block v-for="(node, index) of node.nodes" :key="index">
|
|
||||||
<wx-parse-template :node="node" />
|
|
||||||
</block>
|
|
||||||
</view>
|
|
||||||
</block>
|
|
||||||
|
|
||||||
<!--判断是否是文本节点-->
|
|
||||||
<block v-else-if="node.node == 'text' ">{{node.text}}</block>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import wxParseTemplate from './wxParseTemplate8';
|
|
||||||
import wxParseImg from './wxParseImg';
|
|
||||||
import wxParseVideo from './wxParseVideo';
|
|
||||||
import wxParseAudio from './wxParseAudio';
|
|
||||||
import wxParseTable from './wxParseTable';
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: 'wxParseTemplate7',
|
|
||||||
props: {
|
|
||||||
node: {},
|
|
||||||
},
|
|
||||||
components: {
|
|
||||||
wxParseTemplate,
|
|
||||||
wxParseImg,
|
|
||||||
wxParseVideo,
|
|
||||||
wxParseAudio,
|
|
||||||
wxParseTable
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
wxParseATap(attr,e) {
|
|
||||||
const {
|
|
||||||
href
|
|
||||||
} = e.currentTarget.dataset;
|
|
||||||
if (!href) return;
|
|
||||||
let parent = this.$parent;
|
|
||||||
while(!parent.preview || typeof parent.preview !== 'function') {
|
|
||||||
parent = parent.$parent;
|
|
||||||
}
|
|
||||||
parent.navigate(href, e, attr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
@ -1,88 +0,0 @@
|
||||||
<template>
|
|
||||||
<!--判断是否是标签节点-->
|
|
||||||
<block v-if="node.node == 'element'">
|
|
||||||
<!--button类型-->
|
|
||||||
<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
|
|
||||||
<wx-parse-template :node="node" />
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<!--a类型-->
|
|
||||||
<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
|
|
||||||
<block v-for="(node, index) of node.nodes" :key="index">
|
|
||||||
<wx-parse-template :node="node" />
|
|
||||||
</block>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<!--li类型-->
|
|
||||||
<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
|
|
||||||
<block v-for="(node, index) of node.nodes" :key="index">
|
|
||||||
<wx-parse-template :node="node" />
|
|
||||||
</block>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<!--table类型-->
|
|
||||||
<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
|
|
||||||
|
|
||||||
<!--br类型-->
|
|
||||||
<!-- #ifndef H5 -->
|
|
||||||
<text v-else-if="node.tag == 'br'">\n</text>
|
|
||||||
<!-- #endif -->
|
|
||||||
<!-- #ifdef H5 -->
|
|
||||||
<br v-else-if="node.tag == 'br'">
|
|
||||||
<!-- #endif -->
|
|
||||||
|
|
||||||
<!--video类型-->
|
|
||||||
<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
|
|
||||||
|
|
||||||
<!--audio类型-->
|
|
||||||
<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
|
|
||||||
|
|
||||||
<!--img类型-->
|
|
||||||
<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
|
|
||||||
|
|
||||||
<!--其他标签-->
|
|
||||||
<view v-else :class="node.classStr" :style="node.styleStr">
|
|
||||||
<block v-for="(node, index) of node.nodes" :key="index">
|
|
||||||
<wx-parse-template :node="node" />
|
|
||||||
</block>
|
|
||||||
</view>
|
|
||||||
</block>
|
|
||||||
|
|
||||||
<!--判断是否是文本节点-->
|
|
||||||
<block v-else-if="node.node == 'text' ">{{node.text}}</block>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import wxParseTemplate from './wxParseTemplate9';
|
|
||||||
import wxParseImg from './wxParseImg';
|
|
||||||
import wxParseVideo from './wxParseVideo';
|
|
||||||
import wxParseAudio from './wxParseAudio';
|
|
||||||
import wxParseTable from './wxParseTable';
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: 'wxParseTemplate8',
|
|
||||||
props: {
|
|
||||||
node: {},
|
|
||||||
},
|
|
||||||
components: {
|
|
||||||
wxParseTemplate,
|
|
||||||
wxParseImg,
|
|
||||||
wxParseVideo,
|
|
||||||
wxParseAudio,
|
|
||||||
wxParseTable
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
wxParseATap(attr,e) {
|
|
||||||
const {
|
|
||||||
href
|
|
||||||
} = e.currentTarget.dataset;
|
|
||||||
if (!href) return;
|
|
||||||
let parent = this.$parent;
|
|
||||||
while(!parent.preview || typeof parent.preview !== 'function') {
|
|
||||||
parent = parent.$parent;
|
|
||||||
}
|
|
||||||
parent.navigate(href, e, attr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
@ -1,88 +0,0 @@
|
||||||
<template>
|
|
||||||
<!--判断是否是标签节点-->
|
|
||||||
<block v-if="node.node == 'element'">
|
|
||||||
<!--button类型-->
|
|
||||||
<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
|
|
||||||
<wx-parse-template :node="node" />
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<!--a类型-->
|
|
||||||
<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
|
|
||||||
<block v-for="(node, index) of node.nodes" :key="index">
|
|
||||||
<wx-parse-template :node="node" />
|
|
||||||
</block>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<!--li类型-->
|
|
||||||
<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
|
|
||||||
<block v-for="(node, index) of node.nodes" :key="index">
|
|
||||||
<wx-parse-template :node="node" />
|
|
||||||
</block>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<!--table类型-->
|
|
||||||
<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
|
|
||||||
|
|
||||||
<!--br类型-->
|
|
||||||
<!-- #ifndef H5 -->
|
|
||||||
<text v-else-if="node.tag == 'br'">\n</text>
|
|
||||||
<!-- #endif -->
|
|
||||||
<!-- #ifdef H5 -->
|
|
||||||
<br v-else-if="node.tag == 'br'">
|
|
||||||
<!-- #endif -->
|
|
||||||
|
|
||||||
<!--video类型-->
|
|
||||||
<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
|
|
||||||
|
|
||||||
<!--audio类型-->
|
|
||||||
<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
|
|
||||||
|
|
||||||
<!--img类型-->
|
|
||||||
<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
|
|
||||||
|
|
||||||
<!--其他标签-->
|
|
||||||
<view v-else :class="node.classStr" :style="node.styleStr">
|
|
||||||
<block v-for="(node, index) of node.nodes" :key="index">
|
|
||||||
<wx-parse-template :node="node" />
|
|
||||||
</block>
|
|
||||||
</view>
|
|
||||||
</block>
|
|
||||||
|
|
||||||
<!--判断是否是文本节点-->
|
|
||||||
<block v-else-if="node.node == 'text' ">{{node.text}}</block>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import wxParseTemplate from './wxParseTemplate10';
|
|
||||||
import wxParseImg from './wxParseImg';
|
|
||||||
import wxParseVideo from './wxParseVideo';
|
|
||||||
import wxParseAudio from './wxParseAudio';
|
|
||||||
import wxParseTable from './wxParseTable';
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: 'wxParseTemplate9',
|
|
||||||
props: {
|
|
||||||
node: {},
|
|
||||||
},
|
|
||||||
components: {
|
|
||||||
wxParseTemplate,
|
|
||||||
wxParseImg,
|
|
||||||
wxParseVideo,
|
|
||||||
wxParseAudio,
|
|
||||||
wxParseTable
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
wxParseATap(attr,e) {
|
|
||||||
const {
|
|
||||||
href
|
|
||||||
} = e.currentTarget.dataset;
|
|
||||||
if (!href) return;
|
|
||||||
let parent = this.$parent;
|
|
||||||
while(!parent.preview || typeof parent.preview !== 'function') {
|
|
||||||
parent = parent.$parent;
|
|
||||||
}
|
|
||||||
parent.navigate(href, e, attr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
@ -1,15 +0,0 @@
|
||||||
<template>
|
|
||||||
<!--增加video标签支持,并循环添加-->
|
|
||||||
<view :class="node.classStr" :style="node.styleStr">
|
|
||||||
<video :class="node.classStr" :style="node.styleStr" class="video-video" :src="node.attr.src"></video>
|
|
||||||
</view>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
export default {
|
|
||||||
name: 'wxParseVideo',
|
|
||||||
props: {
|
|
||||||
node: {},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
@ -1,261 +0,0 @@
|
||||||
/**
|
|
||||||
* html2Json 改造来自: https://github.com/Jxck/html2json
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* 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
|
|
||||||
*/
|
|
||||||
|
|
||||||
import wxDiscode from './wxDiscode';
|
|
||||||
import HTMLParser from './htmlparser';
|
|
||||||
|
|
||||||
function makeMap(str) {
|
|
||||||
const obj = {};
|
|
||||||
const items = str.split(',');
|
|
||||||
for (let i = 0; i < items.length; i += 1) obj[items[i]] = true;
|
|
||||||
return obj;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Block Elements - HTML 5
|
|
||||||
const block = makeMap('br,code,address,article,applet,aside,audio,blockquote,button,canvas,center,dd,del,dir,div,dl,dt,fieldset,figcaption,figure,footer,form,frameset,h1,h2,h3,h4,h5,h6,header,hgroup,hr,iframe,ins,isindex,li,map,menu,noframes,noscript,object,ol,output,p,pre,section,script,table,tbody,td,tfoot,th,thead,tr,ul,video');
|
|
||||||
|
|
||||||
// Inline Elements - HTML 5
|
|
||||||
const inline = makeMap('a,abbr,acronym,applet,b,basefont,bdo,big,button,cite,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,textarea,tt,u,var');
|
|
||||||
|
|
||||||
// Elements that you can, intentionally, leave open
|
|
||||||
// (and which close themselves)
|
|
||||||
const closeSelf = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr');
|
|
||||||
|
|
||||||
function removeDOCTYPE(html) {
|
|
||||||
const isDocument = /<body.*>([^]*)<\/body>/.test(html);
|
|
||||||
return isDocument ? RegExp.$1 : html;
|
|
||||||
}
|
|
||||||
|
|
||||||
function trimHtml(html) {
|
|
||||||
return html
|
|
||||||
.replace(/<!--.*?-->/gi, '')
|
|
||||||
.replace(/\/\*.*?\*\//gi, '')
|
|
||||||
.replace(/[ ]+</gi, '<')
|
|
||||||
.replace(/<script[^]*<\/script>/gi, '')
|
|
||||||
.replace(/<style[^]*<\/style>/gi, '');
|
|
||||||
}
|
|
||||||
|
|
||||||
function getScreenInfo() {
|
|
||||||
const screen = {};
|
|
||||||
wx.getSystemInfo({
|
|
||||||
success: (res) => {
|
|
||||||
screen.width = res.windowWidth;
|
|
||||||
screen.height = res.windowHeight;
|
|
||||||
},
|
|
||||||
});
|
|
||||||
return screen;
|
|
||||||
}
|
|
||||||
|
|
||||||
function html2json(html, customHandler, imageProp, host) {
|
|
||||||
// 处理字符串
|
|
||||||
html = removeDOCTYPE(html);
|
|
||||||
html = trimHtml(html);
|
|
||||||
html = wxDiscode.strDiscode(html);
|
|
||||||
// 生成node节点
|
|
||||||
const bufArray = [];
|
|
||||||
const results = {
|
|
||||||
nodes: [],
|
|
||||||
imageUrls: [],
|
|
||||||
};
|
|
||||||
|
|
||||||
const screen = getScreenInfo();
|
|
||||||
function Node(tag) {
|
|
||||||
this.node = 'element';
|
|
||||||
this.tag = tag;
|
|
||||||
|
|
||||||
this.$screen = screen;
|
|
||||||
}
|
|
||||||
|
|
||||||
HTMLParser(html, {
|
|
||||||
start(tag, attrs, unary) {
|
|
||||||
// node for this element
|
|
||||||
const node = new Node(tag);
|
|
||||||
|
|
||||||
if (bufArray.length !== 0) {
|
|
||||||
const parent = bufArray[0];
|
|
||||||
if (parent.nodes === undefined) {
|
|
||||||
parent.nodes = [];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (block[tag]) {
|
|
||||||
node.tagType = 'block';
|
|
||||||
} else if (inline[tag]) {
|
|
||||||
node.tagType = 'inline';
|
|
||||||
} else if (closeSelf[tag]) {
|
|
||||||
node.tagType = 'closeSelf';
|
|
||||||
}
|
|
||||||
|
|
||||||
node.attr = attrs.reduce((pre, attr) => {
|
|
||||||
const { name } = attr;
|
|
||||||
let { value } = attr;
|
|
||||||
if (name === 'class') {
|
|
||||||
node.classStr = value;
|
|
||||||
}
|
|
||||||
// has multi attibutes
|
|
||||||
// make it array of attribute
|
|
||||||
if (name === 'style') {
|
|
||||||
node.styleStr = value;
|
|
||||||
}
|
|
||||||
if (value.match(/ /)) {
|
|
||||||
value = value.split(' ');
|
|
||||||
}
|
|
||||||
|
|
||||||
// if attr already exists
|
|
||||||
// merge it
|
|
||||||
if (pre[name]) {
|
|
||||||
if (Array.isArray(pre[name])) {
|
|
||||||
// already array, push to last
|
|
||||||
pre[name].push(value);
|
|
||||||
} else {
|
|
||||||
// single value, make it array
|
|
||||||
pre[name] = [pre[name], value];
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// not exist, put it
|
|
||||||
pre[name] = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
return pre;
|
|
||||||
}, {});
|
|
||||||
|
|
||||||
// 优化样式相关属性
|
|
||||||
if (node.classStr) {
|
|
||||||
node.classStr += ` ${node.tag}`;
|
|
||||||
} else {
|
|
||||||
node.classStr = node.tag;
|
|
||||||
}
|
|
||||||
if (node.tagType === 'inline') {
|
|
||||||
node.classStr += ' inline';
|
|
||||||
}
|
|
||||||
|
|
||||||
// 对img添加额外数据
|
|
||||||
if (node.tag === 'img') {
|
|
||||||
let imgUrl = node.attr.src;
|
|
||||||
imgUrl = wxDiscode.urlToHttpUrl(imgUrl, imageProp.domain);
|
|
||||||
Object.assign(node.attr, imageProp, {
|
|
||||||
src: imgUrl || '',
|
|
||||||
});
|
|
||||||
if (imgUrl) {
|
|
||||||
results.imageUrls.push(imgUrl);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 处理a标签属性
|
|
||||||
if (node.tag === 'a') {
|
|
||||||
node.attr.href = node.attr.href || '';
|
|
||||||
}
|
|
||||||
|
|
||||||
// 处理font标签样式属性
|
|
||||||
if (node.tag === 'font') {
|
|
||||||
const fontSize = [
|
|
||||||
'x-small',
|
|
||||||
'small',
|
|
||||||
'medium',
|
|
||||||
'large',
|
|
||||||
'x-large',
|
|
||||||
'xx-large',
|
|
||||||
'-webkit-xxx-large',
|
|
||||||
];
|
|
||||||
const styleAttrs = {
|
|
||||||
color: 'color',
|
|
||||||
face: 'font-family',
|
|
||||||
size: 'font-size',
|
|
||||||
};
|
|
||||||
if (!node.styleStr) node.styleStr = '';
|
|
||||||
Object.keys(styleAttrs).forEach((key) => {
|
|
||||||
if (node.attr[key]) {
|
|
||||||
const value = key === 'size' ? fontSize[node.attr[key] - 1] : node.attr[key];
|
|
||||||
node.styleStr += `${styleAttrs[key]}: ${value};`;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// 临时记录source资源
|
|
||||||
if (node.tag === 'source') {
|
|
||||||
results.source = node.attr.src;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (customHandler.start) {
|
|
||||||
customHandler.start(node, results);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (unary) {
|
|
||||||
// if this tag doesn't have end tag
|
|
||||||
// like <img src="hoge.png"/>
|
|
||||||
// add to parents
|
|
||||||
const parent = bufArray[0] || results;
|
|
||||||
if (parent.nodes === undefined) {
|
|
||||||
parent.nodes = [];
|
|
||||||
}
|
|
||||||
parent.nodes.push(node);
|
|
||||||
} else {
|
|
||||||
bufArray.unshift(node);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
end(tag) {
|
|
||||||
// merge into parent tag
|
|
||||||
const node = bufArray.shift();
|
|
||||||
if (node.tag !== tag) {
|
|
||||||
console.error('invalid state: mismatch end tag');
|
|
||||||
}
|
|
||||||
|
|
||||||
// 当有缓存source资源时于于video补上src资源
|
|
||||||
if (node.tag === 'video' && results.source) {
|
|
||||||
node.attr.src = results.source;
|
|
||||||
delete results.source;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (customHandler.end) {
|
|
||||||
customHandler.end(node, results);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (bufArray.length === 0) {
|
|
||||||
results.nodes.push(node);
|
|
||||||
} else {
|
|
||||||
const parent = bufArray[0];
|
|
||||||
if (!parent.nodes) {
|
|
||||||
parent.nodes = [];
|
|
||||||
}
|
|
||||||
parent.nodes.push(node);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
chars(text) {
|
|
||||||
if (!text.trim()) return;
|
|
||||||
|
|
||||||
const node = {
|
|
||||||
node: 'text',
|
|
||||||
text,
|
|
||||||
};
|
|
||||||
|
|
||||||
if (customHandler.chars) {
|
|
||||||
customHandler.chars(node, results);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (bufArray.length === 0) {
|
|
||||||
results.nodes.push(node);
|
|
||||||
} else {
|
|
||||||
const parent = bufArray[0];
|
|
||||||
if (parent.nodes === undefined) {
|
|
||||||
parent.nodes = [];
|
|
||||||
}
|
|
||||||
parent.nodes.push(node);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
return results;
|
|
||||||
}
|
|
||||||
|
|
||||||
export default html2json;
|
|
||||||
|
|
@ -1,156 +0,0 @@
|
||||||
/**
|
|
||||||
*
|
|
||||||
* htmlParser改造自: https://github.com/blowsie/Pure-JavaScript-HTML5-Parser
|
|
||||||
*
|
|
||||||
* 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
|
|
||||||
*/
|
|
||||||
// Regular Expressions for parsing tags and attributes
|
|
||||||
|
|
||||||
const startTag = /^<([-A-Za-z0-9_]+)((?:\s+[a-zA-Z0-9_:][-a-zA-Z0-9_:.]*(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/;
|
|
||||||
const endTag = /^<\/([-A-Za-z0-9_]+)[^>]*>/;
|
|
||||||
const attr = /([a-zA-Z0-9_:][-a-zA-Z0-9_:.]*)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g;
|
|
||||||
|
|
||||||
function makeMap(str) {
|
|
||||||
const obj = {};
|
|
||||||
const items = str.split(',');
|
|
||||||
for (let i = 0; i < items.length; i += 1) obj[items[i]] = true;
|
|
||||||
return obj;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Empty Elements - HTML 5
|
|
||||||
const empty = makeMap('area,base,basefont,br,col,frame,hr,img,input,link,meta,param,embed,command,keygen,source,track,wbr');
|
|
||||||
|
|
||||||
// Block Elements - HTML 5
|
|
||||||
const block = makeMap('address,code,article,applet,aside,audio,blockquote,button,canvas,center,dd,del,dir,div,dl,dt,fieldset,figcaption,figure,footer,form,frameset,h1,h2,h3,h4,h5,h6,header,hgroup,hr,iframe,ins,isindex,li,map,menu,noframes,noscript,object,ol,output,p,pre,section,script,table,tbody,td,tfoot,th,thead,tr,ul,video');
|
|
||||||
|
|
||||||
// Inline Elements - HTML 5
|
|
||||||
const inline = makeMap('a,abbr,acronym,applet,b,basefont,bdo,big,br,button,cite,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,textarea,tt,u,var');
|
|
||||||
|
|
||||||
// Elements that you can, intentionally, leave open
|
|
||||||
// (and which close themselves)
|
|
||||||
const closeSelf = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr');
|
|
||||||
|
|
||||||
// Attributes that have their values filled in disabled="disabled"
|
|
||||||
const fillAttrs = makeMap('checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected');
|
|
||||||
|
|
||||||
function HTMLParser(html, handler) {
|
|
||||||
let index;
|
|
||||||
let chars;
|
|
||||||
let match;
|
|
||||||
let last = html;
|
|
||||||
const stack = [];
|
|
||||||
|
|
||||||
stack.last = () => stack[stack.length - 1];
|
|
||||||
|
|
||||||
function parseEndTag(tag, tagName) {
|
|
||||||
// If no tag name is provided, clean shop
|
|
||||||
let pos;
|
|
||||||
if (!tagName) {
|
|
||||||
pos = 0;
|
|
||||||
} else {
|
|
||||||
// Find the closest opened tag of the same type
|
|
||||||
tagName = tagName.toLowerCase();
|
|
||||||
for (pos = stack.length - 1; pos >= 0; pos -= 1) {
|
|
||||||
if (stack[pos] === tagName) break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (pos >= 0) {
|
|
||||||
// Close all the open elements, up the stack
|
|
||||||
for (let i = stack.length - 1; i >= pos; i -= 1) {
|
|
||||||
if (handler.end) handler.end(stack[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Remove the open elements from the stack
|
|
||||||
stack.length = pos;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function parseStartTag(tag, tagName, rest, unary) {
|
|
||||||
tagName = tagName.toLowerCase();
|
|
||||||
|
|
||||||
if (block[tagName]) {
|
|
||||||
while (stack.last() && inline[stack.last()]) {
|
|
||||||
parseEndTag('', stack.last());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (closeSelf[tagName] && stack.last() === tagName) {
|
|
||||||
parseEndTag('', tagName);
|
|
||||||
}
|
|
||||||
|
|
||||||
unary = empty[tagName] || !!unary;
|
|
||||||
|
|
||||||
if (!unary) stack.push(tagName);
|
|
||||||
|
|
||||||
if (handler.start) {
|
|
||||||
const attrs = [];
|
|
||||||
|
|
||||||
rest.replace(attr, function genAttr(matches, name) {
|
|
||||||
const value = arguments[2] || arguments[3] || arguments[4] || (fillAttrs[name] ? name : '');
|
|
||||||
|
|
||||||
attrs.push({
|
|
||||||
name,
|
|
||||||
value,
|
|
||||||
escaped: value.replace(/(^|[^\\])"/g, '$1\\"'), // "
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
if (handler.start) {
|
|
||||||
handler.start(tagName, attrs, unary);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
while (html) {
|
|
||||||
chars = true;
|
|
||||||
|
|
||||||
if (html.indexOf('</') === 0) {
|
|
||||||
match = html.match(endTag);
|
|
||||||
|
|
||||||
if (match) {
|
|
||||||
html = html.substring(match[0].length);
|
|
||||||
match[0].replace(endTag, parseEndTag);
|
|
||||||
chars = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// start tag
|
|
||||||
} else if (html.indexOf('<') === 0) {
|
|
||||||
match = html.match(startTag);
|
|
||||||
|
|
||||||
if (match) {
|
|
||||||
html = html.substring(match[0].length);
|
|
||||||
match[0].replace(startTag, parseStartTag);
|
|
||||||
chars = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (chars) {
|
|
||||||
index = html.indexOf('<');
|
|
||||||
let text = '';
|
|
||||||
while (index === 0) {
|
|
||||||
text += '<';
|
|
||||||
html = html.substring(1);
|
|
||||||
index = html.indexOf('<');
|
|
||||||
}
|
|
||||||
text += index < 0 ? html : html.substring(0, index);
|
|
||||||
html = index < 0 ? '' : html.substring(index);
|
|
||||||
|
|
||||||
if (handler.chars) handler.chars(text);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (html === last) throw new Error(`Parse Error: ${html}`);
|
|
||||||
last = html;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Clean up any remaining tags
|
|
||||||
parseEndTag();
|
|
||||||
}
|
|
||||||
|
|
||||||
export default HTMLParser;
|
|
||||||
|
|
@ -1,209 +0,0 @@
|
||||||
// HTML 支持的数学符号
|
|
||||||
function strNumDiscode(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, '⋅');
|
|
||||||
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, '<span class=\'spaceshow\'> </span>');
|
|
||||||
// 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, "<span class='spaceshow'> </span>");
|
|
||||||
str = str.replace(/ | | /g, '<span class=\'spaceshow\'> </span>');
|
|
||||||
str = str.replace(/ | /g, '<span class=\'spaceshow\'> </span>');
|
|
||||||
str = str.replace(/ | | /g, '<span class=\'spaceshow\'> </span>');
|
|
||||||
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(/ |$#8201;| /g, '<span class=\'spaceshow\'> </span>');
|
|
||||||
str = str.replace(/‌|‌|‌/g, '<span class=\'spaceshow\'></span>');
|
|
||||||
str = str.replace(/‍|$#8205;|‍/g, '<span class=\'spaceshow\'></span>');
|
|
||||||
str = str.replace(/‎|$#8206;|‎/g, '<span class=\'spaceshow\'></span>');
|
|
||||||
str = str.replace(/‏|‏|‏/g, '<span class=\'spaceshow\'></span>');
|
|
||||||
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 strDiscode(str) {
|
|
||||||
str = strNumDiscode(str);
|
|
||||||
str = strGreeceDiscode(str);
|
|
||||||
str = strcharacterDiscode(str);
|
|
||||||
str = strOtherDiscode(str);
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
|
|
||||||
function urlToHttpUrl(url, domain) {
|
|
||||||
if (/^\/\//.test(url)) {
|
|
||||||
return `https:${url}`;
|
|
||||||
} else if (/^\//.test(url)) {
|
|
||||||
return `https://${domain}${url}`;
|
|
||||||
}
|
|
||||||
return url;
|
|
||||||
}
|
|
||||||
|
|
||||||
export default {
|
|
||||||
strDiscode,
|
|
||||||
urlToHttpUrl,
|
|
||||||
};
|
|
||||||
|
|
@ -1,258 +0,0 @@
|
||||||
/**
|
|
||||||
* 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
|
|
||||||
*/
|
|
||||||
/**
|
|
||||||
* 请在全局下引入该文件,@import '/static/wxParse.css';
|
|
||||||
*/
|
|
||||||
.wxParse {
|
|
||||||
user-select:none;
|
|
||||||
width: 100%;
|
|
||||||
font-family: Helvetica, "PingFangSC", 'Microsoft Yahei', '微软雅黑', Arial, sans-serif;
|
|
||||||
color: #333;
|
|
||||||
line-height: 1.5;
|
|
||||||
font-size: 1em;
|
|
||||||
text-align:justify;/* //左右两端对齐 */
|
|
||||||
}
|
|
||||||
.wxParse view ,.wxParse uni-view{
|
|
||||||
word-break: break-word;
|
|
||||||
}
|
|
||||||
.wxParse .p {
|
|
||||||
padding-bottom: 0.5em;
|
|
||||||
clear: both;
|
|
||||||
/* letter-spacing: 0;//字间距 */
|
|
||||||
}
|
|
||||||
.wxParse .inline {
|
|
||||||
display: inline;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.wxParse .div {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.wxParse .h1{
|
|
||||||
font-size: 2em;
|
|
||||||
line-height: 1.2em;
|
|
||||||
margin: 0.67em 0;
|
|
||||||
}
|
|
||||||
.wxParse .h2{
|
|
||||||
font-size: 1.5em;
|
|
||||||
margin: 0.83em 0;
|
|
||||||
}
|
|
||||||
.wxParse .h3{
|
|
||||||
font-size: 1.17em;
|
|
||||||
margin: 1em 0;
|
|
||||||
}
|
|
||||||
.wxParse .h4{
|
|
||||||
margin: 1.33em 0;
|
|
||||||
}
|
|
||||||
.wxParse .h5{
|
|
||||||
font-size: 0.83em;
|
|
||||||
margin: 1.67em 0;
|
|
||||||
}
|
|
||||||
.wxParse .h6{
|
|
||||||
font-size: 0.83em;
|
|
||||||
margin: 1.67em 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.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 .spaceshow{
|
|
||||||
white-space: pre;
|
|
||||||
}
|
|
||||||
.wxParse .pre,
|
|
||||||
.wxParse .tt,
|
|
||||||
.wxParse .code,
|
|
||||||
.wxParse .kbd,
|
|
||||||
.wxParse .samp {
|
|
||||||
font-family: monospace;
|
|
||||||
}
|
|
||||||
.wxParse .pre {
|
|
||||||
overflow: auto;
|
|
||||||
background: #f5f5f5;
|
|
||||||
padding: 16upx;
|
|
||||||
white-space: pre;
|
|
||||||
margin: 1em 0upx;
|
|
||||||
font-size: 24upx;
|
|
||||||
}
|
|
||||||
.wxParse .code {
|
|
||||||
overflow: auto;
|
|
||||||
padding: 16upx;
|
|
||||||
white-space: pre;
|
|
||||||
margin: 1em 0upx;
|
|
||||||
background: #f5f5f5;
|
|
||||||
font-size: 24upx;
|
|
||||||
}
|
|
||||||
|
|
||||||
.wxParse .big {
|
|
||||||
font-size: 1.17em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.wxParse .small,
|
|
||||||
.wxParse .sub,
|
|
||||||
.wxParse .sup {
|
|
||||||
font-size: 0.83em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.wxParse .sub {
|
|
||||||
vertical-align: sub;
|
|
||||||
}
|
|
||||||
.wxParse .sup {
|
|
||||||
vertical-align: super;
|
|
||||||
}
|
|
||||||
|
|
||||||
.wxParse .s,
|
|
||||||
.wxParse .strike,
|
|
||||||
.wxParse .del {
|
|
||||||
text-decoration: line-through;
|
|
||||||
}
|
|
||||||
|
|
||||||
.wxParse .strong,
|
|
||||||
.wxParse .text,
|
|
||||||
.wxParse .span,
|
|
||||||
.wxParse .s {
|
|
||||||
display: inline;
|
|
||||||
}
|
|
||||||
|
|
||||||
.wxParse .a {
|
|
||||||
color: deepskyblue;
|
|
||||||
}
|
|
||||||
|
|
||||||
.wxParse .video {
|
|
||||||
text-align: center;
|
|
||||||
margin: 22upx 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.wxParse .video-video {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
.wxParse .uni-image{
|
|
||||||
max-width: 100%;
|
|
||||||
}
|
|
||||||
.wxParse .img {
|
|
||||||
display: block;
|
|
||||||
max-width: 100%;
|
|
||||||
margin-bottom: 0em;/* //与p标签底部padding同时修改 */
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
.wxParse .blockquote {
|
|
||||||
margin: 10upx 0;
|
|
||||||
padding: 22upx 0 22upx 22upx;
|
|
||||||
font-family: Courier, Calibri, "宋体";
|
|
||||||
background: #f5f5f5;
|
|
||||||
border-left: 6upx solid #dbdbdb;
|
|
||||||
}
|
|
||||||
.wxParse .blockquote .p {
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
.wxParse .ul, .wxParse .ol {
|
|
||||||
display: block;
|
|
||||||
margin: 1em 0;
|
|
||||||
padding-left: 2em;
|
|
||||||
}
|
|
||||||
.wxParse .ol {
|
|
||||||
list-style-type: disc;
|
|
||||||
}
|
|
||||||
.wxParse .ol {
|
|
||||||
list-style-type: decimal;
|
|
||||||
}
|
|
||||||
.wxParse .ol>weixin-parse-template,.wxParse .ul>weixin-parse-template {
|
|
||||||
display: list-item;
|
|
||||||
align-items: baseline;
|
|
||||||
text-align: match-parent;
|
|
||||||
}
|
|
||||||
|
|
||||||
.wxParse .ol>.li,.wxParse .ul>.li {
|
|
||||||
display: list-item;
|
|
||||||
align-items: baseline;
|
|
||||||
text-align: match-parent;
|
|
||||||
}
|
|
||||||
.wxParse .ul .ul, .wxParse .ol .ul {
|
|
||||||
list-style-type: circle;
|
|
||||||
}
|
|
||||||
.wxParse .ol .ol .ul, .wxParse .ol .ul .ul, .wxParse .ul .ol .ul, .wxParse .ul .ul .ul {
|
|
||||||
list-style-type: square;
|
|
||||||
}
|
|
||||||
|
|
||||||
.wxParse .u {
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
.wxParse .hide {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
.wxParse .del {
|
|
||||||
display: inline;
|
|
||||||
}
|
|
||||||
.wxParse .figure {
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
.wxParse .tablebox{
|
|
||||||
overflow: auto;
|
|
||||||
background-color: #f5f5f5;
|
|
||||||
background: #f5f5f5;
|
|
||||||
font-size: 13px;
|
|
||||||
padding: 8px;
|
|
||||||
}
|
|
||||||
.wxParse .table .table,.wxParse .table{
|
|
||||||
border-collapse:collapse;
|
|
||||||
box-sizing: border-box;
|
|
||||||
/* 内边框 */
|
|
||||||
/* width: 100%; */
|
|
||||||
overflow: auto;
|
|
||||||
white-space: pre;
|
|
||||||
}
|
|
||||||
.wxParse .tbody{
|
|
||||||
border-collapse:collapse;
|
|
||||||
box-sizing: border-box;
|
|
||||||
/* 内边框 */
|
|
||||||
border: 1px solid #dadada;
|
|
||||||
}
|
|
||||||
.wxParse .table .thead, .wxParse .table .tfoot, .wxParse .table .th{
|
|
||||||
border-collapse:collapse;
|
|
||||||
box-sizing: border-box;
|
|
||||||
background: #ececec;
|
|
||||||
font-weight: 40;
|
|
||||||
}
|
|
||||||
.wxParse .table .tr {
|
|
||||||
border-collapse:collapse;
|
|
||||||
box-sizing: border-box;
|
|
||||||
/* border: 2px solid #F0AD4E; */
|
|
||||||
overflow:auto;
|
|
||||||
}
|
|
||||||
.wxParse .table .th,
|
|
||||||
.wxParse .table .td{
|
|
||||||
border-collapse:collapse;
|
|
||||||
box-sizing: border-box;
|
|
||||||
border: 2upx solid #dadada;
|
|
||||||
overflow:auto;
|
|
||||||
}
|
|
||||||
.wxParse .audio, .wxParse .uni-audio-default{
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
@ -1,228 +0,0 @@
|
||||||
<!--**
|
|
||||||
* forked from:https://github.com/F-loat/mpvue-wxParse
|
|
||||||
*
|
|
||||||
* github地址: https://github.com/dcloudio/uParse
|
|
||||||
*
|
|
||||||
* for: uni-app框架下 富文本解析
|
|
||||||
*
|
|
||||||
* 优化 by gaoyia@qq.com https://github.com/gaoyia/parse
|
|
||||||
*/-->
|
|
||||||
|
|
||||||
<template>
|
|
||||||
|
|
||||||
<!--基础元素-->
|
|
||||||
<div class="wxParse" :class="className" :style="'user-select:' + userSelect">
|
|
||||||
<block v-for="(node, index) of nodes" :key="index" v-if="!loading">
|
|
||||||
<wxParseTemplate :node="node" />
|
|
||||||
</block>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import HtmlToJson from './libs/html2json';
|
|
||||||
import wxParseTemplate from './components/wxParseTemplate0';
|
|
||||||
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: 'wxParse',
|
|
||||||
props: {
|
|
||||||
// user-select:none;
|
|
||||||
userSelect: {
|
|
||||||
type: String,
|
|
||||||
default: 'text' //none |text| all | element
|
|
||||||
},
|
|
||||||
imgOptions: {
|
|
||||||
type: [Object, Boolean],
|
|
||||||
default: function() {
|
|
||||||
return {
|
|
||||||
loop: false,
|
|
||||||
indicator: 'number',
|
|
||||||
longPressActions: false
|
|
||||||
// longPressActions: {
|
|
||||||
// itemList: ['发送给朋友', '保存图片', '收藏'],
|
|
||||||
// success: function (res) {
|
|
||||||
// console.log('选中了第' + (res.tapIndex + 1) + '个按钮');
|
|
||||||
// },
|
|
||||||
// fail: function (res) {
|
|
||||||
// console.log(res.errMsg);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
loading: {
|
|
||||||
type: Boolean,
|
|
||||||
default: false
|
|
||||||
},
|
|
||||||
className: {
|
|
||||||
type: String,
|
|
||||||
default: ''
|
|
||||||
},
|
|
||||||
content: {
|
|
||||||
type: String,
|
|
||||||
default: ''
|
|
||||||
},
|
|
||||||
noData: {
|
|
||||||
type: String,
|
|
||||||
default: '<div style="color: red;">数据不能为空</div>'
|
|
||||||
},
|
|
||||||
startHandler: {
|
|
||||||
type: Function,
|
|
||||||
default () {
|
|
||||||
return node => {
|
|
||||||
node.attr.class = null;
|
|
||||||
node.attr.style = null;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
},
|
|
||||||
endHandler: {
|
|
||||||
type: Function,
|
|
||||||
default: null
|
|
||||||
},
|
|
||||||
charsHandler: {
|
|
||||||
type: Function,
|
|
||||||
default: null
|
|
||||||
},
|
|
||||||
imageProp: {
|
|
||||||
type: Object,
|
|
||||||
default () {
|
|
||||||
return {
|
|
||||||
mode: 'aspectFit',
|
|
||||||
padding: 0,
|
|
||||||
lazyLoad: false,
|
|
||||||
domain: ''
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
components: {
|
|
||||||
wxParseTemplate
|
|
||||||
},
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
nodes: {},
|
|
||||||
imageUrls: [],
|
|
||||||
wxParseWidth: {
|
|
||||||
value: 0
|
|
||||||
}
|
|
||||||
};
|
|
||||||
},
|
|
||||||
computed: {},
|
|
||||||
mounted() {
|
|
||||||
this.setHtml()
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
setHtml() {
|
|
||||||
this.getWidth().then((data) => {
|
|
||||||
this.wxParseWidth.value = data;
|
|
||||||
})
|
|
||||||
let {
|
|
||||||
content,
|
|
||||||
noData,
|
|
||||||
imageProp,
|
|
||||||
startHandler,
|
|
||||||
endHandler,
|
|
||||||
charsHandler
|
|
||||||
} = this;
|
|
||||||
let parseData = content || noData;
|
|
||||||
let customHandler = {
|
|
||||||
start: startHandler,
|
|
||||||
end: endHandler,
|
|
||||||
chars: charsHandler
|
|
||||||
};
|
|
||||||
let results = HtmlToJson(parseData, customHandler, imageProp, this);
|
|
||||||
|
|
||||||
this.imageUrls = results.imageUrls;
|
|
||||||
// this.nodes = results.nodes;
|
|
||||||
|
|
||||||
|
|
||||||
this.nodes = [];
|
|
||||||
results.nodes.forEach((item) => {
|
|
||||||
setTimeout(() => {
|
|
||||||
this.nodes.push(item)
|
|
||||||
}, 0);
|
|
||||||
})
|
|
||||||
},
|
|
||||||
getWidth() {
|
|
||||||
return new Promise((res, rej) => {
|
|
||||||
// #ifndef MP-ALIPAY || MP-BAIDU
|
|
||||||
uni.createSelectorQuery()
|
|
||||||
.in(this)
|
|
||||||
.select('.wxParse')
|
|
||||||
.fields({
|
|
||||||
size: true,
|
|
||||||
scrollOffset: true
|
|
||||||
},
|
|
||||||
data => {
|
|
||||||
res(data.width);
|
|
||||||
}
|
|
||||||
).exec();
|
|
||||||
// #endif
|
|
||||||
// #ifdef MP-BAIDU
|
|
||||||
const query = swan.createSelectorQuery();
|
|
||||||
query.select('.wxParse').boundingClientRect();
|
|
||||||
query.exec(obj => {
|
|
||||||
const rect = obj[0]
|
|
||||||
if (rect) {
|
|
||||||
res(rect.width);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
// #endif
|
|
||||||
// #ifdef MP-ALIPAY
|
|
||||||
my.createSelectorQuery()
|
|
||||||
.select('.wxParse')
|
|
||||||
.boundingClientRect().exec((ret) => {
|
|
||||||
res(ret[0].width);
|
|
||||||
});
|
|
||||||
// #endif
|
|
||||||
});
|
|
||||||
},
|
|
||||||
navigate(href, $event, attr) {
|
|
||||||
console.log(href, attr);
|
|
||||||
this.$emit('navigate', href, $event);
|
|
||||||
},
|
|
||||||
preview(src, $event) {
|
|
||||||
if (!this.imageUrls.length || typeof this.imgOptions === 'boolean') {
|
|
||||||
|
|
||||||
} else {
|
|
||||||
uni.previewImage({
|
|
||||||
current: src,
|
|
||||||
urls: this.imageUrls,
|
|
||||||
loop: this.imgOptions.loop,
|
|
||||||
indicator: this.imgOptions.indicator,
|
|
||||||
longPressActions: this.imgOptions.longPressActions
|
|
||||||
});
|
|
||||||
}
|
|
||||||
this.$emit('preview', src, $event);
|
|
||||||
},
|
|
||||||
removeImageUrl(src) {
|
|
||||||
const {
|
|
||||||
imageUrls
|
|
||||||
} = this;
|
|
||||||
imageUrls.splice(imageUrls.indexOf(src), 1);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
// 父组件中提供
|
|
||||||
provide() {
|
|
||||||
return {
|
|
||||||
parseWidth: this.wxParseWidth,
|
|
||||||
parseSelect: this.userSelect
|
|
||||||
// 提示:provide 和 inject 绑定并不是可响应的。这是刻意为之的。然而,如果你传入了一个可监听的对象,那么其对象的属性还是可响应的。
|
|
||||||
};
|
|
||||||
},
|
|
||||||
watch: {
|
|
||||||
content(){
|
|
||||||
this.setHtml()
|
|
||||||
}
|
|
||||||
// content: {
|
|
||||||
// handler: function(newVal, oldVal) {
|
|
||||||
// if (newVal !== oldVal) {
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
// },
|
|
||||||
// deep: true
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
@ -158,7 +158,12 @@
|
||||||
"usingComponents" : true,
|
"usingComponents" : true,
|
||||||
"uniStatistics" : {
|
"uniStatistics" : {
|
||||||
"enable" : false
|
"enable" : false
|
||||||
}
|
},
|
||||||
|
"setting" : {
|
||||||
|
"es6" : true,
|
||||||
|
"urlCheck" : false
|
||||||
|
},
|
||||||
|
"appid" : "tta5ead3573ad6d9d601"
|
||||||
},
|
},
|
||||||
"uniStatistics" : {
|
"uniStatistics" : {
|
||||||
"enable" : false
|
"enable" : false
|
||||||
|
|
|
||||||
|
|
@ -485,7 +485,7 @@
|
||||||
"web-view": "pages/other/web-detail-lucky"
|
"web-view": "pages/other/web-detail-lucky"
|
||||||
},
|
},
|
||||||
"tabBar": {
|
"tabBar": {
|
||||||
"custom": true,
|
"custom": false,
|
||||||
"color": "#CCCCCC",
|
"color": "#CCCCCC",
|
||||||
"selectedColor": "#000000",
|
"selectedColor": "#000000",
|
||||||
"borderStyle": "black",
|
"borderStyle": "black",
|
||||||
|
|
|
||||||
|
|
@ -5,10 +5,8 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import uParse from '@/components/gaoyia-parse/parse.vue'
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
uParse
|
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
|
|
||||||
|
|
@ -59,10 +59,8 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import uParse from '@/components/gaoyia-parse/parse.vue'
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
uParse
|
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,8 @@
|
||||||
:statusBar="true" :border="false" @clickLeft="back"></uni-nav-bar>
|
:statusBar="true" :border="false" @clickLeft="back"></uni-nav-bar>
|
||||||
|
|
||||||
<view class="user-avatar">
|
<view class="user-avatar">
|
||||||
<button class="avatar-wrapper" open-type="chooseAvatar" @chooseavatar="onChooseAvatar">
|
<button class="avatar-wrapper" open-type="chooseAvatar" @chooseavatar="onChooseAvatar"
|
||||||
|
@click="onClickAvatar">
|
||||||
<image class="avatar" :src="avatarUrl"></image>
|
<image class="avatar" :src="avatarUrl"></image>
|
||||||
</button>
|
</button>
|
||||||
<text class="avatar-title">修改头像</text>
|
<text class="avatar-title">修改头像</text>
|
||||||
|
|
@ -50,6 +51,26 @@
|
||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
|
onClickAvatar() {
|
||||||
|
//#ifdef APP
|
||||||
|
uni.chooseImage({
|
||||||
|
count: 1,
|
||||||
|
sourceType: ["album"],
|
||||||
|
success: async (res) => {
|
||||||
|
console.log(res);
|
||||||
|
// this.
|
||||||
|
this.avatarUrl = res.tempFilePaths[0];
|
||||||
|
this.headimg_status = true;
|
||||||
|
const rrrrr = await this.imageToBase64Plus(this.avatarUrl);
|
||||||
|
console.log(rrrrr, "rrrrr");
|
||||||
|
this.imageBase64 = rrrrr;
|
||||||
|
// this.convertToBase64(this.avatarUrl);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
//#endif
|
||||||
|
|
||||||
|
|
||||||
|
},
|
||||||
/**
|
/**
|
||||||
* 初始化用户信息
|
* 初始化用户信息
|
||||||
*/
|
*/
|
||||||
|
|
@ -93,6 +114,7 @@
|
||||||
* 将图片转换为Base64
|
* 将图片转换为Base64
|
||||||
*/
|
*/
|
||||||
convertToBase64(filePath) {
|
convertToBase64(filePath) {
|
||||||
|
console.log(filePath);
|
||||||
uni.getFileSystemManager().readFile({
|
uni.getFileSystemManager().readFile({
|
||||||
filePath: filePath,
|
filePath: filePath,
|
||||||
encoding: "base64",
|
encoding: "base64",
|
||||||
|
|
@ -108,6 +130,22 @@
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
imageToBase64Plus(filePath) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
//#ifdef APP
|
||||||
|
plus.io.resolveLocalFileSystemURL(filePath, entry => {
|
||||||
|
entry.file(file => {
|
||||||
|
const fileReader = new plus.io.FileReader();
|
||||||
|
fileReader.onloadend = function(e) {
|
||||||
|
const base64 = e.target.result;
|
||||||
|
resolve(base64);
|
||||||
|
};
|
||||||
|
fileReader.readAsDataURL(file);
|
||||||
|
}, reject);
|
||||||
|
}, reject);
|
||||||
|
//#endif
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新用户信息
|
* 更新用户信息
|
||||||
|
|
|
||||||
|
|
@ -121,7 +121,7 @@
|
||||||
},
|
},
|
||||||
onLoad(option) {
|
onLoad(option) {
|
||||||
// 判断当前环境
|
// 判断当前环境
|
||||||
// #ifdef MP-WEIXIN
|
// #ifdef MP
|
||||||
this.isMpWeixin = true;
|
this.isMpWeixin = true;
|
||||||
// #endif
|
// #endif
|
||||||
|
|
||||||
|
|
@ -159,7 +159,7 @@
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// #ifdef MP-WEIXIN
|
// #ifdef MP
|
||||||
this.wxUserProfile();
|
this.wxUserProfile();
|
||||||
// #endif
|
// #endif
|
||||||
},
|
},
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user