插件mp-html,页面优化

This commit is contained in:
itgaojian163 2025-02-07 16:29:25 +08:00
parent 9e4b03d26d
commit 706a8f069b
32 changed files with 1189 additions and 94 deletions

18
app.js
View File

@ -1,19 +1,15 @@
//app.js //app.js
App({ App({
onLaunch() { onLaunch() {
// 展示本地存储能力 // wx.login({
// const logs = wx.getStorageSync('logs') || [] // success: res => {
// logs.unshift(Date.now()) // // 发送 res.code 到后台换取 openId, sessionKey, unionId
// wx.setStorageSync('logs', logs) // }
// 登录 // })
wx.login({
success: res => {
// 发送 res.code 到后台换取 openId, sessionKey, unionId
}
})
}, },
globalData: { globalData: {
userInfo: null, userInfo: null,
imgPath: 'http://106.74.34.136:8084/daqi/route/file/true/' // imgPath: 'http://106.74.34.136:8084/daqi/route/file/true/'
imgPath: 'https://www.xzszwhy.cn/daqi/route/file/true/'
} }
}) })

View File

@ -15,7 +15,7 @@
], ],
"window": { "window": {
"navigationBarTextStyle": "black", "navigationBarTextStyle": "black",
"navigationBarTitleText": "达拉特招商", "navigationBarTitleText": "达拉特招商",
"navigationBarBackgroundColor": "#ffffff" "navigationBarBackgroundColor": "#ffffff"
}, },
"tabBar": { "tabBar": {
@ -51,6 +51,7 @@
}, },
"usingComponents": { "usingComponents": {
"page-loading": "/components/page-loading/page-loading", "page-loading": "/components/page-loading/page-loading",
"container-loading": "/components/container-loading/container-loading" "container-loading": "/components/container-loading/container-loading",
"mp-html": "/components/mp-html/index"
} }
} }

View File

@ -273,4 +273,8 @@ page::after {
align-self: center; align-self: center;
justify-content: center; justify-content: center;
margin-top: 70rpx; margin-top: 70rpx;
}
.rich-text {
width: 100%;
} }

View File

@ -1,30 +1,30 @@
// components/container-loading/container-loading.js // components/container-loading/container-loading.js
Component({ Component({
/** /**
* 组件的属性列表 * 组件的属性列表
*/ */
properties: { properties: {
loadingState: { loadingState: {
type: Boolean, type: String,
value: true value: 'loading'
} }
}, },
observers: { observers: {
'loadingState': function (newVal) { 'loadingState': function (newVal) {
this.setData({ this.setData({
loadingVisible: newVal loadingVisible: newVal
}); });
}
},
data: {
loadingVisible: 'loading'
},
/**
* 组件的方法列表
*/
methods: {
} }
},
data: {
loadingVisible: true
},
/**
* 组件的方法列表
*/
methods: {
}
}) })

View File

@ -1,7 +1,9 @@
<view class="container"> <view class="container">
<view class="loading" wx:if="{{loadingVisible}}"> <view class="loading" wx:if="{{loadingVisible=='loading'}}"></view>
<view wx:elif="{{loadingVisible=='error'}}" style="align-self: center;">
<image src="../../imgs/load_err.png" class="loading_err"></image>
</view> </view>
<block wx:if="{{!loadingVisible}}"> <block wx:else="{{loadingVisible=='success'}}">
<slot></slot> <slot></slot>
</block> </block>
</view> </view>

View File

@ -10,6 +10,7 @@
.loading { .loading {
position: relative; position: relative;
width: 40px; width: 40px;
border-radius: 20px;
perspective: 500px; perspective: 500px;
align-self: center; align-self: center;
margin-top: 80rpx; margin-top: 80rpx;
@ -21,6 +22,7 @@
width: 15px; width: 15px;
height: 15px; height: 15px;
content: ""; content: "";
border-radius: 20px;
animation: jumping 0.5s infinite alternate; animation: jumping 0.5s infinite alternate;
background: rgba(0, 0, 0, 0); background: rgba(0, 0, 0, 0);
} }
@ -34,6 +36,16 @@
animation-delay: 0.15s; animation-delay: 0.15s;
} }
.loading_err {
display: flex;
flex-direction: row;
justify-content: center;
width: 150px;
align-items: center;
height: 100px;
align-self: center;
}
@keyframes jumping { @keyframes jumping {
0% { 0% {
transform: scale(1) translateY(0px) rotateX(0deg); transform: scale(1) translateY(0px) rotateX(0deg);

View File

@ -17,6 +17,7 @@
.loading { .loading {
position: relative; position: relative;
width: 50px; width: 50px;
border-radius: 25px;
} }
.loading:before, .loading:before,
@ -25,6 +26,7 @@
width: 20px; width: 20px;
height: 20px; height: 20px;
content: ""; content: "";
border-radius: 20px;
animation: jumping 0.5s infinite alternate; animation: jumping 0.5s infinite alternate;
background: rgba(0, 0, 0, 0); background: rgba(0, 0, 0, 0);
} }

152
components/mp-html/index.js Normal file
View File

@ -0,0 +1,152 @@
"use strict";
function e(e, t, n) {
return t in e ? Object.defineProperty(e, t, {
value: n,
enumerable: !0,
configurable: !0,
writable: !0
}) : e[t] = n, e
}
/*!
* mp-html v2.5.0
* https://github.com/jin-yufeng/mp-html
*
* Released under the MIT license
* Author: Jin Yufeng
*/
var t = require("./parser"),
n = [];
Component({
data: {
nodes: []
},
properties: {
containerStyle: String,
content: {
type: String,
value: "",
observer: function (e) {
this.setContent(e)
}
},
copyLink: {
type: Boolean,
value: !0
},
domain: String,
errorImg: String,
lazyLoad: Boolean,
loadingImg: String,
pauseVideo: {
type: Boolean,
value: !0
},
previewImg: {
type: null,
value: !0
},
scrollTable: Boolean,
selectable: null,
setTitle: {
type: Boolean,
value: !0
},
showImgMenu: {
type: Boolean,
value: !0
},
tagStyle: Object,
useAnchor: null
},
created: function () {
this.plugins = [];
for (var e = n.length; e--;) this.plugins.push(new n[e](this))
},
detached: function () {
this._hook("onDetached")
},
methods: {
in: function (e, t, n) {
e && t && n && (this._in = {
page: e,
selector: t,
scrollTop: n
})
},
navigateTo: function (t, n) {
var i = this;
return new Promise(function (o, r) {
if (!i.data.useAnchor) return void r(Error("Anchor is disabled"));
var a = wx.createSelectorQuery().in(i._in ? i._in.page : i).select((i._in ? i._in.selector : "._root") + (t ? "".concat(">>>", "#").concat(t) : "")).boundingClientRect();
i._in ? a.select(i._in.selector).scrollOffset().select(i._in.selector).boundingClientRect() : a.selectViewport().scrollOffset(), a.exec(function (t) {
if (!t[0]) return void r(Error("Label not found"));
var a = t[1].scrollTop + t[0].top - (t[2] ? t[2].top : 0) + (n || parseInt(i.data.useAnchor) || 0);
i._in ? i._in.page.setData(e({}, i._in.scrollTop, a)) : wx.pageScrollTo({
scrollTop: a,
duration: 300
}), o()
})
})
},
getText: function (e) {
var t = "";
return function e(n) {
for (var i = 0; i < n.length; i++) {
var o = n[i];
if ("text" === o.type) t += o.text.replace(/&amp;/g, "&");
else if ("br" === o.name) t += "\n";
else {
var r = "p" === o.name || "div" === o.name || "tr" === o.name || "li" === o.name || "h" === o.name[0] && o.name[1] > "0" && o.name[1] < "7";
r && t && "\n" !== t[t.length - 1] && (t += "\n"), o.children && e(o.children), r && "\n" !== t[t.length - 1] ? t += "\n" : "td" !== o.name && "th" !== o.name || (t += "\t")
}
}
}(e || this.data.nodes), t
},
getRect: function () {
var e = this;
return new Promise(function (t, n) {
wx.createSelectorQuery().in(e).select("._root").boundingClientRect().exec(function (e) {
return e[0] ? t(e[0]) : n(Error("Root label not found"))
})
})
},
pauseMedia: function () {
for (var e = (this._videos || []).length; e--;) this._videos[e].pause()
},
setPlaybackRate: function (e) {
this.playbackRate = e;
for (var t = (this._videos || []).length; t--;) this._videos[t].playbackRate(e)
},
setContent: function (e, n) {
var i = this;
this.imgList && n || (this.imgList = []), this._videos = [];
var o = {},
r = new t(this).parse(e);
if (n)
for (var a = this.data.nodes.length, s = r.length; s--;) o["nodes[".concat(a + s, "]")] = r[s];
else o.nodes = r;
if (this.setData(o, function () {
i._hook("onLoad"), i.triggerEvent("load")
}), this.data.lazyLoad || this.imgList._unloadimgs < this.imgList.length / 2) {
var l = 0,
c = function e(t) {
t && t.height || (t = {}), t.height === l ? i.triggerEvent("ready", t) : (l = t.height, setTimeout(function () {
i.getRect().then(e).catch(e)
}, 350))
};
this.getRect().then(c).catch(c)
} else this.imgList._unloadimgs || this.getRect().then(function (e) {
i.triggerEvent("ready", e)
}).catch(function () {
i.triggerEvent("ready", {})
})
},
_hook: function (e) {
for (var t = n.length; t--;) this.plugins[t][e] && this.plugins[t][e]()
},
_add: function (e) {
e.detail.root = this
}
}
});

View File

@ -0,0 +1 @@
{"component":true,"usingComponents":{"node":"./node/node"}}

View File

@ -0,0 +1,4 @@
<view class="_root {{selectable?'_select':''}}" style="{{containerStyle}}">
<slot wx:if="{{!nodes[0]}}" />
<node id="_root" childs="{{nodes}}" opts="{{[lazyLoad,loadingImg,errorImg,showImgMenu,selectable]}}" catchadd="_add" />
</view>

View File

@ -0,0 +1,11 @@
._root {
padding: 1px 0;
overflow-x: auto;
overflow-y: hidden;
-webkit-overflow-scrolling: touch
}
._select {
-webkit-user-select: text;
user-select: text
}

View File

@ -0,0 +1,147 @@
"use strict";
function t(t, e) {
var r = Object.keys(t);
if (Object.getOwnPropertySymbols) {
var i = Object.getOwnPropertySymbols(t);
e && (i = i.filter(function (e) {
return Object.getOwnPropertyDescriptor(t, e).enumerable
})), r.push.apply(r, i)
}
return r
}
function e(e) {
for (var i = 1; i < arguments.length; i++) {
var o = null != arguments[i] ? arguments[i] : {};
i % 2 ? t(Object(o), !0).forEach(function (t) {
r(e, t, o[t])
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(o)) : t(Object(o)).forEach(function (t) {
Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(o, t))
})
}
return e
}
function r(t, e, r) {
return e in t ? Object.defineProperty(t, e, {
value: r,
enumerable: !0,
configurable: !0,
writable: !0
}) : t[e] = r, t
}
Component({
data: {
ctrl: {},
// isiOS: wx.getSystemInfoSync().system.includes("iOS")
isiOS: wx.getDeviceInfo().system.includes("iOS")
},
properties: {
childs: Array,
opts: Array
},
options: {
addGlobalClass: !0
},
attached: function () {
this.triggerEvent("add", this, {
bubbles: !0,
composed: !0
})
},
methods: {
noop: function () {},
getNode: function (t) {
try {
for (var e = t.split("_"), r = this.data.childs[e[0]], i = 1; i < e.length; i++) r = r.children[e[i]];
return r
} catch (t) {
return {
text: "",
attrs: {},
children: []
}
}
},
play: function (t) {
var r = t.target.dataset.i,
i = this.getNode(r);
if (this.root.triggerEvent("play", {
source: i.name,
attrs: e(e({}, i.attrs), {}, {
src: i.src[this.data.ctrl[r] || 0]
})
}), this.root.data.pauseVideo) {
for (var o = !1, s = t.target.id, a = this.root._videos.length; a--;) this.root._videos[a].id === s ? o = !0 : this.root._videos[a].pause();
if (!o) {
var n = wx.createVideoContext(s, this);
n.id = s, this.root.playbackRate && n.playbackRate(this.root.playbackRate), this.root._videos.push(n)
}
}
},
imgTap: function (t) {
var e = this.getNode(t.target.dataset.i);
if (e.a) return this.linkTap(e.a);
if (!e.attrs.ignore && (this.root.triggerEvent("imgtap", e.attrs), this.root.data.previewImg)) {
var r = this.root.imgList[e.i];
wx.previewImage({
showmenu: this.root.data.showImgMenu,
current: r,
urls: this.root.imgList
})
}
},
imgLoad: function (t) {
var e, i = t.target.dataset.i,
o = this.getNode(i);
o.w ? (this.data.opts[1] && !this.data.ctrl[i] || -1 === this.data.ctrl[i]) && (e = 1) : e = t.detail.width, e && this.setData(r({}, "ctrl." + i, e)), this.checkReady()
},
checkReady: function () {
var t = this;
this.root.data.lazyLoad || (this.root.imgList._unloadimgs -= 1, this.root.imgList._unloadimgs || setTimeout(function () {
t.root.getRect().then(function (e) {
t.root.triggerEvent("ready", e)
}).catch(function () {
t.root.triggerEvent("ready", {})
})
}, 350))
},
linkTap: function (t) {
var e = t.currentTarget ? this.getNode(t.currentTarget.dataset.i) : {},
r = e.attrs || t,
i = r.href;
this.root.triggerEvent("linktap", Object.assign({
innerText: this.root.getText(e.children || [])
}, r)), i && ("#" === i[0] ? this.root.navigateTo(i.substring(1)).catch(function () {}) : i.split("?")[0].includes("://") ? this.root.data.copyLink && wx.setClipboardData({
data: i,
success: function () {
return wx.showToast({
title: "链接已复制"
})
}
}) : wx.navigateTo({
url: i,
fail: function () {
wx.switchTab({
url: i,
fail: function () {}
})
}
}))
},
mediaError: function (t) {
var e = t.target.dataset.i,
i = this.getNode(e);
if ("video" === i.name || "audio" === i.name) {
var o = (this.data.ctrl[e] || 0) + 1;
if (o > i.src.length && (o = 0), o < i.src.length) return this.setData(r({}, "ctrl." + e, o))
} else "img" === i.name && (this.data.opts[2] && this.setData(r({}, "ctrl." + e, -1)), this.checkReady());
this.root && this.root.triggerEvent("error", {
source: i.name,
attrs: i.attrs,
errMsg: t.detail.errMsg
})
}
}
});

View File

@ -0,0 +1 @@
{"component":true,"usingComponents":{"node":"./node"}}

View File

@ -0,0 +1,34 @@
<wxs module="isInline">
var e = { abbr: !0, b: !0, big: !0, code: !0, del: !0, em: !0, i: !0, ins: !0, label: !0, q: !0, small: !0, span: !0, strong: !0, sub: !0, sup: !0 }; module.exports = function (n, i) { return e[n] || -1 !== (i || "").indexOf("inline") };
</wxs><template name="el">
<block wx:if="{{n.name==='img'}}">
<rich-text wx:if="{{n.t}}" style="display:{{n.t}}" nodes="<img class='_img' style='{{n.attrs.style}}' src='{{n.attrs.src}}'>" data-i="{{i}}" catchtap="imgTap" />
<block wx:else>
<image wx:if="{{(opts[1]&&!ctrl[i])||ctrl[i]<0}}" class="_img" style="{{n.attrs.style}}" src="{{ctrl[i]<0?opts[2]:opts[1]}}" mode="widthFix" />
<image id="{{n.attrs.id}}" class="_img {{n.attrs.class}}" :style="{{ctrl[i]===-1?'display:none;':''}}width:{{ctrl[i]||1}}px;height:1px;{{n.attrs.style}}" src="{{n.attrs.src}}" mode="{{!n.h?'widthFix':(!n.w?'heightFix':(n.m||'scaleToFill'))}}" lazy-load="{{opts[0]}}" webp="{{n.webp}}" show-menu-by-longpress="{{opts[3]&&!n.attrs.ignore}}" data-i="{{i}}" bindload="imgLoad" binderror="mediaError" catchtap="imgTap" bindlongpress="noop" />
</block>
</block><text wx:elif="{{n.text}}" user-select="{{opts[4]=='force'&&isiOS}}" decode>{{n.text}}</text><text wx:elif="{{n.name==='br'}}">\n</text>
<view wx:elif="{{n.name==='a'}}" id="{{n.attrs.id}}" class="{{n.attrs.href?'_a ':''}}{{n.attrs.class}}" hover-class="_hover" style="display:inline;{{n.attrs.style}}" data-i="{{i}}" catchtap="linkTap">
<node childs="{{n.children}}" opts="{{opts}}" style="display:inherit" />
</view><video wx:elif="{{n.name==='video'}}" id="{{n.attrs.id}}" class="{{n.attrs.class}}" style="{{n.attrs.style}}" autoplay="{{n.attrs.autoplay}}" controls="{{n.attrs.controls}}" loop="{{n.attrs.loop}}" muted="{{n.attrs.muted}}" object-fit="{{n.attrs['object-fit']}}" poster="{{n.attrs.poster}}" src="{{n.src[ctrl[i]||0]}}" data-i="{{i}}" bindplay="play" binderror="mediaError" /><audio wx:elif="{{n.name==='audio'}}" id="{{n.attrs.id}}" class="{{n.attrs.class}}" style="{{n.attrs.style}}" author="{{n.attrs.author}}" controls="{{n.attrs.controls}}" loop="{{n.attrs.loop}}" name="{{n.attrs.name}}" poster="{{n.attrs.poster}}" src="{{n.src[ctrl[i]||0]}}" data-i="{{i}}" bindplay="play" binderror="mediaError" />
<rich-text wx:else id="{{n.attrs.id}}" style="{{n.f}}" user-select="{{opts[4]}}" nodes="{{[n]}}" />
</template>
<block wx:for="{{childs}}" wx:for-item="n1" wx:for-index="i1" wx:key="i1"><template wx:if="{{!n1.c&&(!n1.children||n1.name==='a'||!isInline(n1.name,n1.attrs.style))}}" is="el" data="{{n:n1,i:''+i1,opts:opts,ctrl:ctrl}}" />
<view wx:else id="{{n1.attrs.id}}" class="_{{n1.name}} {{n1.attrs.class}}" style="{{n1.attrs.style}}">
<block wx:for="{{n1.children}}" wx:for-item="n2" wx:for-index="i2" wx:key="i2"><template wx:if="{{!n2.c&&(!n2.children||n2.name==='a'||!isInline(n2.name,n2.attrs.style))}}" is="el" data="{{n:n2,i:i1+'_'+i2,opts:opts,ctrl:ctrl}}" />
<view wx:else id="{{n2.attrs.id}}" class="_{{n2.name}} {{n2.attrs.class}}" style="{{n2.attrs.style}}">
<block wx:for="{{n2.children}}" wx:for-item="n3" wx:for-index="i3" wx:key="i3"><template wx:if="{{!n3.c&&(!n3.children||n3.name==='a'||!isInline(n3.name,n3.attrs.style))}}" is="el" data="{{n:n3,i:i1+'_'+i2+'_'+i3,opts:opts,ctrl:ctrl}}" />
<view wx:else id="{{n3.attrs.id}}" class="_{{n3.name}} {{n3.attrs.class}}" style="{{n3.attrs.style}}">
<block wx:for="{{n3.children}}" wx:for-item="n4" wx:for-index="i4" wx:key="i4"><template wx:if="{{!n4.c&&(!n4.children||n4.name==='a'||!isInline(n4.name,n4.attrs.style))}}" is="el" data="{{n:n4,i:i1+'_'+i2+'_'+i3+'_'+i4,opts:opts,ctrl:ctrl}}" />
<view wx:else id="{{n4.attrs.id}}" class="_{{n4.name}} {{n4.attrs.class}}" style="{{n4.attrs.style}}">
<block wx:for="{{n4.children}}" wx:for-item="n5" wx:for-index="i5" wx:key="i5"><template wx:if="{{!n5.c&&(!n5.children||n5.name==='a'||!isInline(n5.name,n5.attrs.style))}}" is="el" data="{{n:n5,i:i1+'_'+i2+'_'+i3+'_'+i4+'_'+i5,opts:opts,ctrl:ctrl}}" />
<node wx:else id="{{n5.attrs.id}}" class="_{{n5.name}} {{n5.attrs.class}}" style="{{n5.attrs.style}}" childs="{{n5.children}}" opts="{{opts}}" />
</block>
</view>
</block>
</view>
</block>
</view>
</block>
</view>
</block>

View File

@ -0,0 +1,157 @@
._a {
padding: 1.5px 0 1.5px 0;
color: #366092;
word-break: break-all
}
._hover {
text-decoration: underline;
opacity: .7
}
._img {
width: 100%;
max-width: 100%;
-webkit-touch-callout: none
}
._b,
._strong {
font-weight: 700
}
._code {
font-family: monospace
}
._del {
text-decoration: line-through
}
._em,
._i {
font-style: italic
}
._h1 {
font-size: 2em
}
._h2 {
font-size: 1.5em
}
._h3 {
font-size: 1.17em
}
._h5 {
font-size: .83em
}
._h6 {
font-size: .67em
}
._h1,
._h2,
._h3,
._h4,
._h5,
._h6 {
display: block;
font-weight: 700
}
._ins {
text-decoration: underline
}
._li {
display: list-item
}
._ol {
list-style-type: decimal
}
._ol,
._ul {
display: block;
padding-left: 40px;
margin: 1em 0
}
._q::before {
content: '"'
}
._q::after {
content: '"'
}
._sub {
font-size: smaller;
vertical-align: sub
}
._sup {
font-size: smaller;
vertical-align: super
}
._tbody,
._tfoot,
._thead {
display: table-row-group
}
._tr {
display: table-row
}
._td,
._th {
display: table-cell;
vertical-align: middle
}
._th {
font-weight: 700;
text-align: center
}
._ul {
list-style-type: disc
}
._ul ._ul {
margin: 0;
list-style-type: circle
}
._ul ._ul ._ul {
list-style-type: square
}
._abbr,
._b,
._code,
._del,
._em,
._i,
._ins,
._label,
._q,
._span,
._strong,
._sub,
._sup {
display: inline
}
._blockquote,
._div,
._p {
display: block
}

View File

@ -0,0 +1,537 @@
"use strict";
function t(t, e) {
var s;
if ("undefined" == typeof Symbol || null == t[Symbol.iterator]) {
if (Array.isArray(t) || (s = i(t)) || e && t && "number" == typeof t.length) {
s && (t = s);
var n = 0,
a = function () {};
return {
s: a,
n: function () {
return n >= t.length ? {
done: !0
} : {
done: !1,
value: t[n++]
}
},
e: function (t) {
throw t
},
f: a
}
}
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")
}
var r, o = !0,
l = !1;
return {
s: function () {
s = t[Symbol.iterator]()
},
n: function () {
var t = s.next();
return o = t.done, t
},
e: function (t) {
l = !0, r = t
},
f: function () {
try {
o || null == s.return || s.return()
} finally {
if (l) throw r
}
}
}
}
function i(t, i) {
if (t) {
if ("string" == typeof t) return e(t, i);
var s = Object.prototype.toString.call(t).slice(8, -1);
return "Object" === s && t.constructor && (s = t.constructor.name), "Map" === s || "Set" === s ? Array.from(t) : "Arguments" === s || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(s) ? e(t, i) : void 0
}
}
function e(t, i) {
(null == i || i > t.length) && (i = t.length);
for (var e = 0, s = new Array(i); e < i; e++) s[e] = t[e];
return s
}
function s(t) {
for (var i = Object.create(null), e = t.split(","), s = e.length; s--;) i[e[s]] = !0;
return i
}
function n(t, i) {
for (var e = t.indexOf("&"); - 1 !== e;) {
var s = t.indexOf(";", e + 3),
n = void 0;
if (-1 === s) break;
"#" === t[e + 1] ? (n = parseInt(("x" === t[e + 2] ? "0" : "") + t.substring(e + 2, s)), isNaN(n) || (t = t.substr(0, e) + String.fromCharCode(n) + t.substr(s + 1))) : (n = t.substring(e + 1, s), (l.entities[n] || "amp" === n && i) && (t = t.substr(0, e) + (l.entities[n] || "&") + t.substr(s + 1))), e = t.indexOf("&", e + 1)
}
return t
}
function a(t) {
for (var i = t.length - 1, e = i; e >= -1; e--)(-1 === e || t[e].c || !t[e].name || "div" !== t[e].name && "p" !== t[e].name && "h" !== t[e].name[0] || (t[e].attrs.style || "").includes("inline")) && (i - e >= 5 && t.splice(e + 1, i - e, {
name: "div",
attrs: {},
children: t.slice(e + 1, i + 1)
}), i = e - 1)
}
function r(t) {
this.options = t.data || {}, this.tagStyle = Object.assign({}, l.tagStyle, this.options.tagStyle), this.imgList = t.imgList || [], this.imgList._unloadimgs = 0, this.plugins = t.plugins || [], this.attrs = Object.create(null), this.stack = [], this.nodes = [], this.pre = (this.options.containerStyle || "").includes("white-space") && this.options.containerStyle.includes("pre") ? 2 : 0
}
function o(t) {
this.handler = t
}
var l = {
trustTags: s("a,abbr,ad,audio,b,blockquote,br,code,col,colgroup,dd,del,dl,dt,div,em,fieldset,h1,h2,h3,h4,h5,h6,hr,i,img,ins,label,legend,li,ol,p,q,ruby,rt,source,span,strong,sub,sup,table,tbody,td,tfoot,th,thead,tr,title,ul,video"),
blockTags: s("address,article,aside,body,caption,center,cite,footer,header,html,nav,pre,section"),
ignoreTags: s("area,base,canvas,embed,frame,head,iframe,input,link,map,meta,param,rp,script,source,style,textarea,title,track,wbr"),
voidTags: s("area,base,br,col,circle,ellipse,embed,frame,hr,img,input,line,link,meta,param,path,polygon,rect,source,track,use,wbr"),
entities: {
lt: "<",
gt: ">",
quot: '"',
apos: "'",
ensp: "",
emsp: "",
nbsp: " ",
semi: ";",
ndash: "",
mdash: "—",
middot: "·",
lsquo: "",
rsquo: "",
ldquo: "“",
rdquo: "”",
bull: "•",
hellip: "…",
larr: "←",
uarr: "↑",
rarr: "→",
darr: "↓"
},
tagStyle: {
address: "font-style:italic",
big: "display:inline;font-size:1.2em",
caption: "display:table-caption;text-align:center",
center: "text-align:center",
cite: "font-style:italic",
dd: "margin-left:40px",
mark: "background-color:yellow",
pre: "font-family:monospace;white-space:pre",
s: "text-decoration:line-through",
small: "display:inline;font-size:0.8em",
strike: "text-decoration:line-through",
u: "text-decoration:underline"
},
svgDict: {
animatetransform: "animateTransform",
lineargradient: "linearGradient",
viewbox: "viewBox",
attributename: "attributeName",
repeatcount: "repeatCount",
repeatdur: "repeatDur",
foreignobject: "foreignObject"
}
},
h = {},
// c = wx.getSystemInfoSync(),
c = wx.getWindowInfo(),
d = c.windowWidth,
p = wx.getDeviceInfo().system,
u = s(" ,\r,\n,\t,\f"),
f = 0;
r.prototype.parse = function (t) {
for (var i = this.plugins.length; i--;) this.plugins[i].onUpdate && (t = this.plugins[i].onUpdate(t, l) || t);
for (new o(this).parse(t); this.stack.length;) this.popNode();
return this.nodes.length > 50 && a(this.nodes), this.nodes
}, r.prototype.expose = function () {
for (var t = this.stack.length; t--;) {
var i = this.stack[t];
if (i.c || "a" === i.name || "video" === i.name || "audio" === i.name) return;
i.c = 1
}
}, r.prototype.hook = function (t) {
for (var i = this.plugins.length; i--;)
if (this.plugins[i].onParse && !1 === this.plugins[i].onParse(t, this)) return !1;
return !0
}, r.prototype.getUrl = function (t) {
var i = this.options.domain;
return "/" === t[0] ? "/" === t[1] ? t = (i ? i.split("://")[0] : "http") + ":" + t : i && (t = i + t) : !i || t.includes("data:") || t.includes("://") || (t = i + "/" + t), t
}, r.prototype.parseStyle = function (t) {
var i = t.attrs,
e = (this.tagStyle[t.name] || "").split(";").concat((i.style || "").split(";")),
s = {},
n = "";
i.id && !this.xml && (this.options.useAnchor ? this.expose() : "img" !== t.name && "a" !== t.name && "video" !== t.name && "audio" !== t.name && (i.id = void 0)), i.width && (s.width = parseFloat(i.width) + (i.width.includes("%") ? "%" : "px"), i.width = void 0), i.height && (s.height = parseFloat(i.height) + (i.height.includes("%") ? "%" : "px"), i.height = void 0);
for (var a = 0, r = e.length; a < r; a++) {
var o = e[a].split(":");
if (!(o.length < 2)) {
var l = o.shift().trim().toLowerCase(),
h = o.join(":").trim();
if ("-" === h[0] && h.lastIndexOf("-") > 0 || h.includes("safe")) n += ";".concat(l, ":").concat(h);
else if (!s[l] || h.includes("import") || !s[l].includes("import")) {
if (h.includes("url")) {
var c = h.indexOf("(") + 1;
if (c) {
for (;
'"' === h[c] || "'" === h[c] || u[h[c]];) c++;
h = h.substr(0, c) + this.getUrl(h.substr(c))
}
} else h.includes("rpx") && (h = h.replace(/[0-9.]+\s*rpx/g, function (t) {
return parseFloat(t) * d / 750 + "px"
}));
s[l] = h
}
}
}
return t.attrs.style = n, s
}, r.prototype.onTagName = function (t) {
this.tagName = this.xml ? t : t.toLowerCase(), "svg" === this.tagName && (this.xml = (this.xml || 0) + 1, l.ignoreTags.style = void 0)
}, r.prototype.onAttrName = function (t) {
t = this.xml ? t : t.toLowerCase(), "data-" === t.substr(0, 5) ? "data-src" !== t || this.attrs.src ? "img" === this.tagName || "a" === this.tagName ? this.attrName = t : this.attrName = void 0 : this.attrName = "src" : (this.attrName = t, this.attrs[t] = "T")
}, r.prototype.onAttrVal = function (t) {
var i = this.attrName || "";
"style" === i || "href" === i ? this.attrs[i] = n(t, !0) : i.includes("src") ? this.attrs[i] = this.getUrl(n(t, !0)) : i && (this.attrs[i] = t)
}, r.prototype.onOpenTag = function (t) {
var i = Object.create(null);
i.name = this.tagName, i.attrs = this.attrs, this.attrs = Object.create(null);
var e = i.attrs,
s = this.stack[this.stack.length - 1],
n = s ? s.children : this.nodes,
a = this.xml ? t : l.voidTags[i.name];
if (h[i.name] && (e.class = h[i.name] + (e.class ? " " + e.class : "")), "embed" === i.name) {
var r = e.src || "";
r.includes(".mp4") || r.includes(".3gp") || r.includes(".m3u8") || (e.type || "").includes("video") ? i.name = "video" : (r.includes(".mp3") || r.includes(".wav") || r.includes(".aac") || r.includes(".m4a") || (e.type || "").includes("audio")) && (i.name = "audio"), e.autostart && (e.autoplay = "T"), e.controls = "T"
}
if ("video" !== i.name && "audio" !== i.name || ("video" !== i.name || e.id || (e.id = "v" + f++), e.controls || e.autoplay || (e.controls = "T"), i.src = [], e.src && (i.src.push(e.src), e.src = void 0), this.expose()), a) {
if (!this.hook(i) || l.ignoreTags[i.name]) return void("base" !== i.name || this.options.domain ? "source" === i.name && s && ("video" === s.name || "audio" === s.name) && e.src && s.src.push(e.src) : this.options.domain = e.href);
var o = this.parseStyle(i);
if ("img" === i.name) {
if (e.src && (e.src.includes("webp") && (i.webp = "T"), e.src.includes("data:") && "all" !== this.options.previewImg && !e["original-src"] && (e.ignore = "T"), !e.ignore || i.webp || e.src.includes("cloud://"))) {
for (var c = this.stack.length; c--;) {
var p = this.stack[c];
"table" !== p.name || i.webp || e.src.includes("cloud://") || (!o.display || o.display.includes("inline") ? i.t = "inline-block" : i.t = o.display, o.display = void 0);
var u = p.attrs.style || "";
if (!u.includes("flex:") || u.includes("flex:0") || u.includes("flex: 0") || o.width && !(parseInt(o.width) > 100))
if (u.includes("flex") && "100%" === o.width)
for (var g = c + 1; g < this.stack.length; g++) {
var m = this.stack[g].attrs.style || "";
if (!m.includes(";width") && !m.includes(" width") && 0 !== m.indexOf("width")) {
o.width = "";
break
}
} else u.includes("inline-block") && (o.width && "%" === o.width[o.width.length - 1] ? (p.attrs.style += ";max-width:" + o.width, o.width = "") : p.attrs.style += ";max-width:100%");
else {
o.width = "100% !important", o.height = "";
for (var v = c + 1; v < this.stack.length; v++) this.stack[v].attrs.style = (this.stack[v].attrs.style || "").replace("inline-", "")
}
"a" === p.name ? i.a = p.attrs : p.c = 1
}
i.i = this.imgList.length;
var y = e["original-src"] || e.src;
if (this.imgList.includes(y)) {
var b = y.indexOf("://");
if (-1 !== b) {
b += 3;
for (var x = y.substr(0, b); b < y.length && "/" !== y[b]; b++) x += Math.random() > .5 ? y[b].toUpperCase() : y[b];
x += y.substr(b), y = x
}
}
this.imgList.push(y), i.t || (this.imgList._unloadimgs += 1)
}
"inline" === o.display && (o.display = ""), e.ignore && (o["max-width"] = o["max-width"] || "100%", e.style += ";-webkit-touch-callout:none"), parseInt(o.width) > d && (o.height = void 0), isNaN(parseInt(o.width)) || (i.w = "T"), !isNaN(parseInt(o.height)) && (!o.height.includes("%") || s && (s.attrs.style || "").includes("height")) && (i.h = "T"), i.w && i.h && o["object-fit"] && ("contain" === o["object-fit"] ? i.m = "aspectFit" : "cover" === o["object-fit"] && (i.m = "aspectFill"))
} else if ("svg" === i.name) return n.push(i), this.stack.push(i), void this.popNode();
for (var w in o) o[w] && (e.style += ";".concat(w, ":").concat(o[w].replace(" !important", "")));
e.style = e.style.substr(1) || void 0
} else("pre" === i.name || (e.style || "").includes("white-space") && e.style.includes("pre")) && 2 !== this.pre && (this.pre = i.pre = 1), i.children = [], this.stack.push(i);
n.push(i)
}, r.prototype.onCloseTag = function (t) {
t = this.xml ? t : t.toLowerCase();
var i;
for (i = this.stack.length; i-- && this.stack[i].name !== t;);
if (-1 !== i)
for (; this.stack.length > i;) this.popNode();
else if ("p" === t || "br" === t) {
var e = this.stack.length ? this.stack[this.stack.length - 1].children : this.nodes;
e.push({
name: t,
attrs: {
class: h[t],
style: this.tagStyle[t]
}
})
}
}, r.prototype.popNode = function () {
var i = this.stack.pop(),
e = i.attrs,
s = i.children,
n = this.stack[this.stack.length - 1],
r = n ? n.children : this.nodes;
if (!this.hook(i) || l.ignoreTags[i.name]) return "title" === i.name && s.length && "text" === s[0].type && this.options.setTitle && wx.setNavigationBarTitle({
title: s[0].text
}), void r.pop();
if (i.pre && 2 !== this.pre) {
this.pre = i.pre = void 0;
for (var o = this.stack.length; o--;) this.stack[o].pre && (this.pre = 1)
}
if ("svg" === i.name) {
if (this.xml > 1) return void this.xml--;
var h = "",
c = e.style;
return e.style = "", e.xmlns = "http://www.w3.org/2000/svg",
function i(e) {
if ("text" === e.type) return void(h += e.text);
var s = l.svgDict[e.name] || e.name;
if ("foreignObject" === s) {
var n, a = t(e.children || []);
try {
for (a.s(); !(n = a.n()).done;) {
var r = n.value;
if (r.attrs && !r.attrs.xmlns) {
r.attrs.xmlns = "http://www.w3.org/1999/xhtml";
break
}
}
} catch (t) {
a.e(t)
} finally {
a.f()
}
}
h += "<" + s;
for (var o in e.attrs) {
var c = e.attrs[o];
c && (h += " ".concat(l.svgDict[o] || o, '="').concat(c.replace(/"/g, ""), '"'))
}
if (e.children) {
h += ">";
for (var d = 0; d < e.children.length; d++) i(e.children[d]);
h += "</" + s + ">"
} else h += "/>"
}(i), i.name = "img", i.attrs = {
src: "data:image/svg+xml;utf8," + h.replace(/#/g, "%23"),
style: c,
ignore: "T"
}, i.children = void 0, this.xml = !1, void(l.ignoreTags.style = !0)
}
var p = {};
if (e.align && ("table" === i.name ? "center" === e.align ? p["margin-inline-start"] = p["margin-inline-end"] = "auto" : p.float = e.align : p["text-align"] = e.align, e.align = void 0), e.dir && (p.direction = e.dir, e.dir = void 0), "font" === i.name && (e.color && (p.color = e.color, e.color = void 0), e.face && (p["font-family"] = e.face, e.face = void 0), e.size)) {
var u = parseInt(e.size);
isNaN(u) || (u < 1 ? u = 1 : u > 7 && (u = 7), p["font-size"] = ["x-small", "small", "medium", "large", "x-large", "xx-large", "xxx-large"][u - 1]), e.size = void 0
}
if ((e.class || "").includes("align-center") && (p["text-align"] = "center"), Object.assign(p, this.parseStyle(i)), "table" !== i.name && parseInt(p.width) > d && (p["max-width"] = "100%", p["box-sizing"] = "border-box"), l.blockTags[i.name]) i.name = "div";
else if (l.trustTags[i.name] || this.xml)
if ("a" === i.name || "ad" === i.name) this.expose();
else if ("video" === i.name || "audio" === i.name)(p.height || "").includes("auto") && (p.height = void 0), i.children = void 0;
else if ("ul" !== i.name && "ol" !== i.name || !i.c)
if ("table" === i.name) {
var f = parseFloat(e.cellpadding),
g = parseFloat(e.cellspacing),
m = parseFloat(e.border),
v = p["border-color"],
y = p["border-style"];
if (i.c && (isNaN(f) && (f = 2), isNaN(g) && (g = 2)), m && (e.style += ";border:".concat(m, "px ").concat(y || "solid", " ").concat(v || "gray")), i.flag && i.c) {
i.flag = void 0, p.display = "grid", "collapse" === p["border-collapse"] && (p["border-collapse"] = void 0, g = 0), g ? (p["grid-gap"] = g + "px", p.padding = g + "px") : m && (e.style += ";border-left:0;border-top:0");
var b = [],
x = [],
w = [],
k = {};
! function i(e) {
for (var s = 0; s < e.length; s++)
if ("tr" === e[s].name) x.push(e[s]);
else if ("colgroup" === e[s].name) {
var n, a = 1,
r = t(e[s].children || []);
try {
for (r.s(); !(n = r.n()).done;) {
var o = n.value;
if ("col" === o.name) {
var l = o.attrs.style || "",
h = l.indexOf("width") ? l.indexOf(";width") : 0;
if (-1 !== h) {
var c = l.indexOf(";", h + 6); - 1 === c && (c = l.length), b[a] = l.substring(h ? h + 7 : 6, c)
}
a += 1
}
}
} catch (t) {
r.e(t)
} finally {
r.f()
}
} else i(e[s].children || [])
}(s);
for (var N = 1; N <= x.length; N++) {
for (var T = 1, O = 0; O < x[N - 1].children.length; O++) {
var j = x[N - 1].children[O];
if ("td" === j.name || "th" === j.name) {
for (; k[N + "." + T];) T++;
j.c = 1;
var S = j.attrs.style || "",
C = S.indexOf("width") ? S.indexOf(";width") : 0;
if (-1 !== C) {
var I = S.indexOf(";", C + 6); - 1 === I && (I = S.length), j.attrs.colspan || (b[T] = S.substring(C ? C + 7 : 6, I)), S = S.substr(0, C) + S.substr(I)
}
if (S += ";display:flex;flex-direction:column", -1 !== (C = S.indexOf("vertical-align"))) {
var A = S.substr(C + 15, 10);
A.includes("middle") ? S += ";justify-content:center" : A.includes("bottom") && (S += ";justify-content:flex-end")
} else S += ";justify-content:center";
if (-1 !== (C = S.indexOf("text-align"))) {
var L = S.substr(C + 11, 10);
L.includes("center") ? S += ";justify-content: center" : L.includes("right") && (S += ";justify-content: right")
}
if (S = (m ? ";border:".concat(m, "px ").concat(y || "solid", " ").concat(v || "gray") + (g ? "" : ";border-right:0;border-bottom:0") : "") + (f ? ";padding:".concat(f, "px") : "") + ";" + S, j.attrs.colspan && (S += ";grid-column-start:".concat(T, ";grid-column-end:").concat(T + parseInt(j.attrs.colspan)), j.attrs.rowspan || (S += ";grid-row-start:".concat(N, ";grid-row-end:").concat(N + 1)), T += parseInt(j.attrs.colspan) - 1), j.attrs.rowspan) {
S += ";grid-row-start:".concat(N, ";grid-row-end:").concat(N + parseInt(j.attrs.rowspan)), j.attrs.colspan || (S += ";grid-column-start:".concat(T, ";grid-column-end:").concat(T + 1));
for (var z = 1; z < j.attrs.rowspan; z++)
for (var F = 0; F < (j.attrs.colspan || 1); F++) k[N + z + "." + (T - F)] = 1
}
S && (j.attrs.style = S), w.push(j), T++
}
}
if (1 === N) {
for (var U = "", q = 1; q < T; q++) U += (b[q] ? b[q] : "auto") + " ";
p["grid-template-columns"] = U
}
}
i.children = w
} else i.c && (p.display = "table"), isNaN(g) || (p["border-spacing"] = g + "px"), (m || f || i.c) && function t(e) {
for (var s = 0; s < e.length; s++) {
var n = e[s];
i.c && (n.c = 1), "th" === n.name || "td" === n.name ? (m && (n.attrs.style = "border:".concat(m, "px ").concat(y || "solid", " ").concat(v || "gray", ";").concat(n.attrs.style || "")), f && (n.attrs.style = "padding:".concat(f, "px;").concat(n.attrs.style || ""))) : n.children && t(n.children)
}
}(s);
if (this.options.scrollTable && !(e.style || "").includes("inline")) {
var V = Object.assign({}, i);
i.name = "div", i.attrs = {
style: "overflow-x:auto;padding:1px"
}, i.children = [V], e = V.attrs
}
} else if (("tbody" === i.name || "tr" === i.name) && i.flag && i.c) i.flag = void 0,
function t(i) {
for (var e = 0; e < i.length; e++)
if ("td" === i[e].name)
for (var s = 0, n = ["color", "background", "background-color"]; s < n.length; s++) {
var a = n[s];
p[a] && (i[e].attrs.style = a + ":" + p[a] + ";" + (i[e].attrs.style || ""))
} else t(i[e].children || [])
}(s);
else if ("td" !== i.name && "th" !== i.name || !e.colspan && !e.rowspan) {
if ("ruby" === i.name) {
i.name = "span";
for (var D = 0; D < s.length - 1; D++) "text" === s[D].type && "rt" === s[D + 1].name && (s[D] = {
name: "span",
attrs: {
style: "display:inline-block;text-align:center"
},
children: [{
name: "div",
attrs: {
style: "font-size:50%;" + (s[D + 1].attrs.style || "")
},
children: s[D + 1].children
}, s[D]]
}, s.splice(D + 1, 1))
}
} else
for (var B = this.stack.length; B--;) "table" !== this.stack[B].name && "tbody" !== this.stack[B].name && "tr" !== this.stack[B].name || (this.stack[B].flag = 1);
else {
var M = {
a: "lower-alpha",
A: "upper-alpha",
i: "lower-roman",
I: "upper-roman"
};
M[e.type] && (e.style += ";list-style-type:" + M[e.type], e.type = void 0), i.c = 1;
for (var P = s.length; P--;) "li" === s[P].name && (s[P].c = 1)
} else i.name = "span";
if ((p.display || "").includes("flex") && !i.c)
for (var Z = s.length; Z--;) {
var _ = s[Z];
_.f && (_.attrs.style = (_.attrs.style || "") + _.f, _.f = void 0)
}
var E = n && ((n.attrs.style || "").includes("flex") || (n.attrs.style || "").includes("grid")) && !i.c && !(p.display || "").includes("inline");
E && (i.f = ";max-width:100%"), s.length >= 50 && i.c && !(p.display || "").includes("flex") && a(s);
for (var G in p)
if (p[G]) {
var W = ";".concat(G, ":").concat(p[G].replace(" !important", ""));
E && (G.includes("flex") && "flex-direction" !== G || "align-self" === G || G.includes("grid") || "-" === p[G][0] || G.includes("width") && W.includes("%")) ? (i.f += W, "width" === G && (e.style += ";width:100%")) : e.style += W
} e.style = e.style.substr(1) || void 0
}, r.prototype.onText = function (t) {
if (!this.pre) {
for (var i, e = "", s = 0, a = t.length; s < a; s++) u[t[s]] ? (" " !== e[e.length - 1] && (e += " "), "\n" !== t[s] || i || (i = !0)) : e += t[s];
if (" " === e && i) return;
t = e
}
var r = Object.create(null);
if (r.type = "text", r.text = n(t), this.hook(r)) {
"force" === this.options.selectable && p.includes("iOS") && !wx.canIUse("rich-text.user-select") && this.expose();
(this.stack.length ? this.stack[this.stack.length - 1].children : this.nodes).push(r)
}
}, o.prototype.parse = function (t) {
this.content = t || "", this.i = 0, this.start = 0, this.state = this.text;
for (var i = this.content.length; - 1 !== this.i && this.i < i;) this.state()
}, o.prototype.checkClose = function (t) {
var i = "/" === this.content[this.i];
return !!(">" === this.content[this.i] || i && ">" === this.content[this.i + 1]) && (t && this.handler[t](this.content.substring(this.start, this.i)), this.i += i ? 2 : 1, this.start = this.i, this.handler.onOpenTag(i), "script" === this.handler.tagName ? (this.i = this.content.indexOf("</", this.i), -1 !== this.i && (this.i += 2, this.start = this.i), this.state = this.endTag) : this.state = this.text, !0)
}, o.prototype.text = function () {
if (this.i = this.content.indexOf("<", this.i), -1 === this.i) return void(this.start < this.content.length && this.handler.onText(this.content.substring(this.start, this.content.length)));
var t = this.content[this.i + 1];
if (t >= "a" && t <= "z" || t >= "A" && t <= "Z") this.start !== this.i && this.handler.onText(this.content.substring(this.start, this.i)), this.start = ++this.i, this.state = this.tagName;
else if ("/" === t || "!" === t || "?" === t) {
this.start !== this.i && this.handler.onText(this.content.substring(this.start, this.i));
var i = this.content[this.i + 2];
if ("/" === t && (i >= "a" && i <= "z" || i >= "A" && i <= "Z")) return this.i += 2, this.start = this.i, void(this.state = this.endTag);
var e = "--\x3e";
"!" === t && "-" === this.content[this.i + 2] && "-" === this.content[this.i + 3] || (e = ">"), this.i = this.content.indexOf(e, this.i), -1 !== this.i && (this.i += e.length, this.start = this.i)
} else this.i++
}, o.prototype.tagName = function () {
if (u[this.content[this.i]]) {
for (this.handler.onTagName(this.content.substring(this.start, this.i)); u[this.content[++this.i]];);
this.i < this.content.length && !this.checkClose() && (this.start = this.i, this.state = this.attrName)
} else this.checkClose("onTagName") || this.i++
}, o.prototype.attrName = function () {
var t = this.content[this.i];
if (u[t] || "=" === t) {
this.handler.onAttrName(this.content.substring(this.start, this.i));
for (var i = "=" === t, e = this.content.length; ++this.i < e;)
if (t = this.content[this.i], !u[t]) {
if (this.checkClose()) return;
if (i) return this.start = this.i, void(this.state = this.attrVal);
if ("=" !== this.content[this.i]) return this.start = this.i, void(this.state = this.attrName);
i = !0
}
} else this.checkClose("onAttrName") || this.i++
}, o.prototype.attrVal = function () {
var t = this.content[this.i],
i = this.content.length;
if ('"' === t || "'" === t) {
if (this.start = ++this.i, this.i = this.content.indexOf(t, this.i), -1 === this.i) return;
this.handler.onAttrVal(this.content.substring(this.start, this.i))
} else
for (; this.i < i; this.i++) {
if (u[this.content[this.i]]) {
this.handler.onAttrVal(this.content.substring(this.start, this.i));
break
}
if (this.checkClose("onAttrVal")) return
}
for (; u[this.content[++this.i]];);
this.i < i && !this.checkClose() && (this.start = this.i, this.state = this.attrName)
}, o.prototype.endTag = function () {
var t = this.content[this.i];
if (u[t] || ">" === t || "/" === t) {
if (this.handler.onCloseTag(this.content.substring(this.start, this.i)), ">" !== t && (this.i = this.content.indexOf(">", this.i), -1 === this.i)) return;
this.start = ++this.i, this.state = this.text
} else this.i++
}, module.exports = r;

View File

@ -18,6 +18,7 @@
.loading { .loading {
position: relative; position: relative;
width: 50px; width: 50px;
border-radius: 25px;
} }
.loading:before, .loading:before,
@ -25,6 +26,7 @@
position: absolute; position: absolute;
width: 20px; width: 20px;
height: 20px; height: 20px;
border-radius: 20px;
content: ""; content: "";
animation: jumping 0.5s infinite alternate; animation: jumping 0.5s infinite alternate;
background: rgba(0, 0, 0, 0); background: rgba(0, 0, 0, 0);

BIN
imgs/load_err.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

@ -43,7 +43,7 @@
</view> </view>
<view class="info-item"> <view class="info-item">
<view class="title">注册地址</view> <view class="title">注册地址</view>
<view class="content">{{bean.zhuCeDiZhi}}</view> <view class="content line-1">{{bean.zhuCeDiZhi}}</view>
</view> </view>
</view> </view>
@ -73,7 +73,7 @@
</scroll-view> </scroll-view>
<view class="desc-title">企业介绍</view> <view class="desc-title">企业介绍</view>
<view class="news-content mt-20" style="padding: 0rpx;"> <view class="news-content mt-20" style="padding: 0rpx;">
<rich-text nodes="{{bean.content}}"></rich-text> <mp-html content="{{bean.content}}" class="rich-text"></mp-html>
</view> </view>
<view class="desc-title">联系方式</view> <view class="desc-title">联系方式</view>
<view class="mt-20 address">地址:{{bean.lianXi.name}}</view> <view class="mt-20 address">地址:{{bean.lianXi.name}}</view>

View File

@ -116,12 +116,6 @@ page {
color: #303030; color: #303030;
line-height: 27rpx; line-height: 27rpx;
margin-top: 20rpx; margin-top: 20rpx;
overflow: hidden;
/* 超出部分隐藏 */
white-space: nowrap;
/* 文本不换行 */
text-overflow: ellipsis;
/* 超出部分显示省略号 */
} }
.p-tabs { .p-tabs {

View File

@ -22,10 +22,10 @@ Page({
isAreaExpand: false, isAreaExpand: false,
industryAreaList: [], //产业园区 industryAreaList: [], //产业园区
platesList: [], //产业图谱, platesList: [], //产业图谱,
domainCategoryLoading: true, //特色产业 domainCategoryLoading: 'loading', //特色产业
platesLoading: true, //产业图谱 platesLoading: 'loading', //产业图谱
keyEnterpriseLoading: true, //重点企业 keyEnterpriseLoading: 'loading', //重点企业
industryLoading: true, //开发园区 industryLoading: 'loading', //开发园区
}, },
/** /**
@ -94,12 +94,12 @@ Page({
getDomainCategory() { getDomainCategory() {
var _self = this var _self = this
_self.setData({ _self.setData({
domainCategoryLoading: true domainCategoryLoading: 'loading'
}) })
DomainService.doGetDomainCategory() DomainService.doGetDomainCategory()
.then(res => { .then(res => {
_self.setData({ _self.setData({
domainCategoryLoading: false domainCategoryLoading: 'success'
}) })
if (res) { if (res) {
_self.setData({ _self.setData({
@ -107,6 +107,9 @@ Page({
}) })
} }
}, err => { }, err => {
_self.setData({
domainCategoryLoading: 'error'
})
wx.showToast({ wx.showToast({
icon: "none", icon: "none",
title: '网络错误(domainCategory)', title: '网络错误(domainCategory)',
@ -123,12 +126,12 @@ Page({
getPlates() { getPlates() {
var _self = this var _self = this
_self.setData({ _self.setData({
platesLoading: true platesLoading: 'loading'
}) })
DomainService.doGetPlates() DomainService.doGetPlates()
.then(res => { .then(res => {
_self.setData({ _self.setData({
platesLoading: false platesLoading: 'success'
}) })
if (res) { if (res) {
_self.setData({ _self.setData({
@ -137,6 +140,9 @@ Page({
} }
_self.countWidth() _self.countWidth()
}, err => { }, err => {
_self.setData({
platesLoading: 'error'
})
wx.showToast({ wx.showToast({
icon: "none", icon: "none",
title: '网络错误(plates)', title: '网络错误(plates)',
@ -153,12 +159,12 @@ Page({
getKeyEnterprise() { getKeyEnterprise() {
var _self = this var _self = this
_self.setData({ _self.setData({
keyEnterpriseLoading: true keyEnterpriseLoading: 'loading'
}) })
DomainService.doGetKeyEnterprise() DomainService.doGetKeyEnterprise()
.then(res => { .then(res => {
_self.setData({ _self.setData({
keyEnterpriseLoading: false keyEnterpriseLoading: 'success'
}) })
if (res) { if (res) {
_self.setData({ _self.setData({
@ -166,6 +172,9 @@ Page({
}) })
} }
}, err => { }, err => {
_self.setData({
keyEnterpriseLoading: 'error'
})
wx.showToast({ wx.showToast({
icon: "none", icon: "none",
title: '网络错误(domainEnterprise)', title: '网络错误(domainEnterprise)',
@ -176,12 +185,12 @@ Page({
getIndustryArea() { getIndustryArea() {
var _self = this var _self = this
_self.setData({ _self.setData({
industryLoading: true industryLoading: 'loading'
}) })
DomainService.doGetIndustryArea() DomainService.doGetIndustryArea()
.then(res => { .then(res => {
_self.setData({ _self.setData({
industryLoading: false industryLoading: 'success'
}) })
if (res && res.rows) { if (res && res.rows) {
_self.setData({ _self.setData({
@ -189,6 +198,9 @@ Page({
}) })
} }
}, err => { }, err => {
_self.setData({
industryLoading: 'error'
})
wx.showToast({ wx.showToast({
icon: "none", icon: "none",
title: '网络错误(IndustryArea)', title: '网络错误(IndustryArea)',
@ -202,8 +214,6 @@ Page({
var offsetLeft = e.detail.scrollLeft var offsetLeft = e.detail.scrollLeft
var scale = _self.data.scrollWidth / 30 var scale = _self.data.scrollWidth / 30
var offsetX = offsetLeft / scale var offsetX = offsetLeft / scale
console.log(`${offsetX} ${offsetLeft} ${scale}`)
console.log(`滚动条宽度:${_self.data.sliderWidth}---偏移量:${offsetX}`)
_self.setData({ _self.setData({
sliderWidth: _self.data.defaultSliderWidth + offsetX, sliderWidth: _self.data.defaultSliderWidth + offsetX,
lastScrollLeft: scrollLeft lastScrollLeft: scrollLeft

View File

@ -2,7 +2,7 @@
<view class="body"> <view class="body">
<!-- 产业基础 --> <!-- 产业基础 -->
<view class="func-container"> <view class="func-container">
<image class="desc-video" src="https://ts1.cn.mm.bing.net/th/id/R-C.9e45a633e95179a37c907fa2797999ad?rik=aMuPS4TunAh5ZA&riu=http%3a%2f%2fwww.quazero.com%2fuploads%2fallimg%2f140303%2f1-140303214Q2.jpg&ehk=P%2firfYpARc1fHht%2bWpapYR4W15p6SLABE8CBexoeon4%3d&risl=&pid=ImgRaw&r=0"></image> <image class="desc-video" src="{{imgBasePath}}{{domainInfo.newsContentCoverList[0].contentCoverId}}"></image>
<view class="desc-title">{{domainInfo.newsContentTitle}}</view> <view class="desc-title">{{domainInfo.newsContentTitle}}</view>
<view class="line-noappoint mt-20 desc-font-24" style="{{isAreaExpand?'-webkit-line-clamp: 0;':'-webkit-line-clamp: 4;'}}"> <view class="line-noappoint mt-20 desc-font-24" style="{{isAreaExpand?'-webkit-line-clamp: 0;':'-webkit-line-clamp: 4;'}}">
<rich-text nodes="{{domainInfo.newsContentContent}}"></rich-text> <rich-text nodes="{{domainInfo.newsContentContent}}"></rich-text>

View File

@ -42,9 +42,10 @@ Page({
imgBasePath: app.globalData.imgPath, imgBasePath: app.globalData.imgPath,
superiorityList: [], //投资优势, superiorityList: [], //投资优势,
investAreaList: [], //投资环境List investAreaList: [], //投资环境List
investLoading: true, investLoading: 'loading',
isLoading: true, isLoading: true,
showInvestLoading: true showInvestLoading: 'loading',
superiorityLoading: 'loading'
}, },
onLoad(e) { onLoad(e) {
var _self = this var _self = this
@ -84,7 +85,6 @@ Page({
}, },
onReady() { onReady() {
this.videoContext = wx.createVideoContext('descVideo', this); // 创建videoContext实例 this.videoContext = wx.createVideoContext('descVideo', this); // 创建videoContext实例
console.log(this.videoContext)
}, },
onShow() { onShow() {
if (this.videoContext) { if (this.videoContext) {
@ -157,12 +157,12 @@ Page({
getInvest() { getInvest() {
var _self = this var _self = this
_self.setData({ _self.setData({
showInvestLoading: true showInvestLoading: 'loading'
}) })
IndexService.doGetInvest() IndexService.doGetInvest()
.then(res => { .then(res => {
_self.setData({ _self.setData({
showInvestLoading: false showInvestLoading: 'success'
}) })
if (res) { if (res) {
_self.setData({ _self.setData({
@ -170,6 +170,9 @@ Page({
}) })
} }
}, err => { }, err => {
_self.setData({
showInvestLoading: 'error'
})
wx.showToast({ wx.showToast({
icon: "none", icon: "none",
title: '网络错误(投资机会)', title: '网络错误(投资机会)',
@ -186,14 +189,15 @@ Page({
getInvestArea(id) { getInvestArea(id) {
var _self = this var _self = this
_self.setData({ _self.setData({
investLoading: true investLoading: 'loading'
}) })
IndexService.doGetInvestArea({ IndexService.doGetInvestArea({
newsDirectoriesId: id newsDirectoriesId: id
}) })
.then(res => { .then(res => {
console.log('投资环境成功')
_self.setData({ _self.setData({
investLoading: false investLoading: 'success'
}) })
if (res) { if (res) {
_self.setData({ _self.setData({
@ -201,6 +205,10 @@ Page({
}) })
} }
}, err => { }, err => {
console.log('投资环境错误')
_self.setData({
investLoading: 'error'
})
wx.showToast({ wx.showToast({
icon: "none", icon: "none",
title: '网络错误(InvestArea)', title: '网络错误(InvestArea)',
@ -210,8 +218,14 @@ Page({
//投资优势 //投资优势
getSuperiority() { getSuperiority() {
var _self = this var _self = this
_self.setData({
superiorityLoading: 'loading'
})
IndexService.doGetSuperiorityList() IndexService.doGetSuperiorityList()
.then(res => { .then(res => {
_self.setData({
superiorityLoading: 'success'
})
if (res) { if (res) {
_self.setData({ _self.setData({
superiorityList: res superiorityList: res
@ -219,6 +233,9 @@ Page({
} }
_self.countWidth() _self.countWidth()
}, err => { }, err => {
_self.setData({
superiorityLoading: 'error'
})
wx.showToast({ wx.showToast({
icon: "none", icon: "none",
title: '网络错误(superiority)', title: '网络错误(superiority)',
@ -234,6 +251,9 @@ Page({
//获取投资环境分类 //获取投资环境分类
getInvestAreaCategory() { getInvestAreaCategory() {
var _self = this var _self = this
_self.setData({
investLoading: 'loading'
})
IndexService.doGetInvestAreaCategory() IndexService.doGetInvestAreaCategory()
.then(res => { .then(res => {
if (res) { if (res) {
@ -243,11 +263,13 @@ Page({
_self.getInvestArea(_self.data.investAreaId) _self.getInvestArea(_self.data.investAreaId)
} }
}, err => { }, err => {
_self.setData({
investLoading: 'error'
})
wx.showToast({ wx.showToast({
icon: "none", icon: "none",
title: '网络错误(InvestCategory)', title: '网络错误(InvestCategory)',
}) })
console.log(err)
}) })
}, },
//计算滚动框的宽度 //计算滚动框的宽度

View File

@ -2,7 +2,7 @@
<view class="body"> <view class="body">
<!-- 视频简介 --> <!-- 视频简介 -->
<view class="func-container"> <view class="func-container">
<video id="descVideo" class="desc-video" object-fit="fill" autoplay="{{false}}" src="{{descVideoUrl}}" poster="{{descVideoCover}}" /> <video id="descVideo" class="desc-video" object-fit="fill" autoplay="{{false}}" src="{{descVideoUrl}}" poster="{{descVideoCover}}" />
<view class="desc-title mb-10">达拉特旗</view> <view class="desc-title mb-10">达拉特旗</view>
<view class="text-expansion mt-20"> <view class="text-expansion mt-20">
<view class="text-expansion__text {{ isExpand ? 'text-expansion__text--expand' : '' }}"> <view class="text-expansion__text {{ isExpand ? 'text-expansion__text--expand' : '' }}">
@ -85,19 +85,23 @@
<image src="/imgs/ic_superiority_title.png" class="icon" /> <image src="/imgs/ic_superiority_title.png" class="icon" />
<text class="name">投资优势</text> <text class="name">投资优势</text>
</view> </view>
<scroll-view id="plates" scroll-x="{{true}}" bindscroll="scrollPlates"> <container-loading loadingState="{{superiorityLoading}}">
<view class="superiority-content"> <view style="display: flex;flex-direction: column;">
<block wx:for="{{superiorityList}}" wx:key="index"> <scroll-view id="plates" scroll-x="{{true}}" bindscroll="scrollPlates">
<view class="superiority-item" bind:tap="goSuperiorityDetail" data-id="{{item.newsDirectoriesId}}"> <view class="superiority-content">
<image class="superiory-icon" src="{{imgBasePath}}{{item.directoriesPhoto}}"></image> <block wx:for="{{superiorityList}}" wx:key="index">
<text class="superiory-txt">{{item.directoriesName}}</text> <view class="superiority-item" bind:tap="goSuperiorityDetail" data-id="{{item.newsDirectoriesId}}">
<image class="superiory-icon" src="{{imgBasePath}}{{item.directoriesPhoto}}.png"></image>
<text class="superiory-txt">{{item.directoriesName}}</text>
</view>
</block>
</view> </view>
</block> </scroll-view>
<view class="slider-bar-box mt-20" wx:if="{{isShowDot}}">
<view class="slider-bar" style="width: {{sliderWidth}}px;"></view>
</view>
</view> </view>
</scroll-view> </container-loading>
<view class="slider-bar-box mt-20" wx:if="{{isShowDot}}">
<view class="slider-bar" style="width: {{sliderWidth}}px;"></view>
</view>
</view> </view>
<!-- 投资机会 --> <!-- 投资机会 -->
<view class="func-container mt-20"> <view class="func-container mt-20">

View File

@ -6,7 +6,7 @@
<view class="news-content"> <view class="news-content">
<image src="{{imgBasePath}}{{bean.newsContentCoverList[0].contentCoverId}}" style="align-self: center;width: 100%;"></image> <image src="{{imgBasePath}}{{bean.newsContentCoverList[0].contentCoverId}}" style="align-self: center;width: 100%;"></image>
<rich-text nodes="{{bean.newsContentContent}}"></rich-text> <mp-html content="{{bean.newsContentContent}}" class="rich-text"></mp-html>
</view> </view>
</view> </view>
<page-loading wx:if="{{showPageLoading}}"></page-loading> <page-loading wx:if="{{showPageLoading}}"></page-loading>

View File

@ -23,7 +23,7 @@
</view> </view>
</view> </view>
<view class="news-content"> <view class="news-content">
<rich-text nodes="{{bean.content}}"></rich-text> <mp-html content="{{bean.content}}" class="rich-text"></mp-html>
</view> </view>
</view> </view>

View File

@ -1,10 +1,10 @@
<view class="body"> <view class="body">
<view class="news-title">{{bean.title}}</view> <view class="news-title">{{bean.title}}</view>
<view class="news-attr-box"> <view class="news-attr-box">
<view class="news-attr">{{bean.newsContentPublishTime}} {{bean.newsContentAuthor}}</view> <view class="news-attr">{{bean.newsContentPublishTime}} {{bean.newsContentAuthor}}</view>
</view> </view>
<view class="news-content"> <view class="news-content">
<rich-text nodes="{{bean.newsContentContent}}"></rich-text> <mp-html content="{{bean.newsContentContent}}" class="rich-text"></mp-html>
</view> </view>
</view> </view>
<page-loading wx:if="{{showPageLoading}}"></page-loading> <page-loading wx:if="{{showPageLoading}}"></page-loading>

View File

@ -1,10 +1,10 @@
<view class="body"> <view class="body">
<view class="news-title">{{bean.title}}</view> <view class="news-title">{{bean.title}}</view>
<view class="news-attr-box"> <view class="news-attr-box">
<view class="news-attr">{{bean.newsContentPublishTime}} {{bean.newsContentAuthor}}</view> <view class="news-attr">{{bean.newsContentPublishTime}} {{bean.newsContentAuthor}}</view>
</view> </view>
<view class="news-content"> <view class="news-content">
<rich-text nodes="{{bean.newsContentContent}}"></rich-text> <mp-html content="{{bean.newsContentContent}}" class="rich-text"></mp-html>
</view> </view>
</view> </view>
<page-loading wx:if="{{showPageLoading}}"></page-loading> <page-loading wx:if="{{showPageLoading}}"></page-loading>

View File

@ -4,7 +4,7 @@
<view class="news-attr">{{bean.newsContentPublishTime}} {{bean.newsContentAuthor}}</view> <view class="news-attr">{{bean.newsContentPublishTime}} {{bean.newsContentAuthor}}</view>
</view> </view>
<view class="news-content"> <view class="news-content">
<rich-text nodes="{{bean.newsContentContent}}"></rich-text> <mp-html content="{{bean.newsContentContent}}" class="rich-text"></mp-html>
</view> </view>
</view> </view>
<page-loading wx:if="{{showPageLoading}}"></page-loading> <page-loading wx:if="{{showPageLoading}}"></page-loading>

View File

@ -1,11 +1,12 @@
<view class="body"> <view class="body">
<view class="news-title">{{bean.title}}</view> <view class="news-title">{{bean.title}}</view>
<view class="news-attr-box"> <view class="news-attr-box">
<view class="news-attr">{{bean.newsContentPublishTime}} {{bean.newsContentAuthor}}</view> <view class="news-attr">{{bean.newsContentPublishTime}} {{bean.newsContentAuthor}}</view>
</view> </view>
<view class="news-content"> <view class="news-content">
<image wx:if="{{bean.newsContentCoverList.length>0}}" src="{{imgBasePath}}{{bean.newsContentCoverList[0].contentCoverId}}" style="align-self: center;width: 100%;"></image> <image wx:if="{{bean.newsContentCoverList.length>0}}" src="{{imgBasePath}}{{bean.newsContentCoverList[0].contentCoverId}}" style="align-self: center;width: 100%;"></image>
<rich-text nodes="{{bean.newsContentContent}}"></rich-text> <mp-html content="{{bean.newsContentContent}}" class="rich-text"></mp-html>
</view> </view>
</view> </view>
<page-loading wx:if="{{showPageLoading}}"></page-loading> <page-loading wx:if="{{showPageLoading}}"></page-loading>

View File

@ -25,5 +25,5 @@
"tabIndent": "auto", "tabIndent": "auto",
"tabSize": 2 "tabSize": 2
}, },
"appid": "wx501e9ce64f25c418" "appid": "wx66052ca4134fddfe"
} }

View File

@ -1,5 +1,6 @@
// 定义api服务地址 // 定义api服务地址
const baseUrl = 'http://106.74.34.136:8084/daqi/app'; const baseUrl = 'https://www.xzszwhy.cn/daqi/app';
// const baseUrl = 'http://106.74.34.136:8084/daqi/app';
// https://8182018kg.goho.co/daqi/app/news-content/listpage?newsDirectoriesId=91a98b33-1133-4935-8c4c-9b37cc5fe63b&rows=1&page=1 // https://8182018kg.goho.co/daqi/app/news-content/listpage?newsDirectoriesId=91a98b33-1133-4935-8c4c-9b37cc5fe63b&rows=1&page=1
/** /**
* 传入请求参数返回Promise支持链试调用 * 传入请求参数返回Promise支持链试调用