已支付订单列表:where.payStatus = 1;

This commit is contained in:
2024-07-10 22:44:18 +08:00
parent 9dd834adb5
commit 1311eb03b8
611 changed files with 92828 additions and 400 deletions
@@ -0,0 +1,392 @@
"use strict";
const common_vendor = require("../../../../../common/vendor.js");
const block0 = {};
const node = () => Promise.resolve().then(() => L1VzZXJzL2d4d2Vic29mdC9BUFAvZ3h0eXp4LXVuaWFwcC1jbGkvc3JjL3VuaV9tb2R1bGVzL3V2LXBhcnNlL2NvbXBvbmVudHMvdXYtcGFyc2Uvbm9kZS9ub2RlLnZ1ZQ);
const _sfc_main = {
name: "node",
options: {
virtualHost: true
},
data() {
return {
ctrl: {},
isiOS: common_vendor.index.getSystemInfoSync().system.includes("iOS")
};
},
props: {
name: String,
attrs: {
type: Object,
default() {
return {};
}
},
childs: Array,
opts: Array
},
components: {
node
},
mounted() {
this.$nextTick(() => {
for (this.root = this.$parent; this.root.$options.name !== "uv-parse"; this.root = this.root.$parent) ;
});
},
beforeDestroy() {
},
methods: {
toJSON() {
return this;
},
/**
* @description 播放视频事件
* @param {Event} e
*/
play(e) {
this.root.$emit("play");
if (this.root.pauseVideo) {
let flag = false;
const id = e.target.id;
for (let i = this.root._videos.length; i--; ) {
if (this.root._videos[i].id === id) {
flag = true;
} else {
this.root._videos[i].pause();
}
}
if (!flag) {
const ctx = common_vendor.index.createVideoContext(
id,
this
);
ctx.id = id;
if (this.root.playbackRate) {
ctx.playbackRate(this.root.playbackRate);
}
this.root._videos.push(ctx);
}
}
},
/**
* @description 图片点击事件
* @param {Event} e
*/
imgTap(e) {
const node2 = this.childs[e.currentTarget.dataset.i];
if (node2.a) {
this.linkTap(node2.a);
return;
}
if (node2.attrs.ignore) return;
this.root.$emit("imgtap", node2.attrs);
if (this.root.previewImg) {
common_vendor.index.previewImage({
showmenu: this.root.showImgMenu,
current: parseInt(node2.attrs.i),
urls: this.root.imgList
});
}
},
/**
* @description 图片长按
*/
imgLongTap(e) {
},
/**
* @description 图片加载完成事件
* @param {Event} e
*/
imgLoad(e) {
const i = e.currentTarget.dataset.i;
if (!this.childs[i].w) {
this.$set(this.ctrl, i, e.detail.width);
} else if (this.opts[1] && !this.ctrl[i] || this.ctrl[i] === -1) {
this.$set(this.ctrl, i, 1);
}
this.checkReady();
},
/**
* @description 检查是否所有图片加载完毕
*/
checkReady() {
if (this.root && !this.root.lazyLoad) {
this.root._unloadimgs -= 1;
if (!this.root._unloadimgs) {
setTimeout(() => {
this.root.getRect().then((rect) => {
this.root.$emit("ready", rect);
}).catch(() => {
this.root.$emit("ready", {});
});
}, 350);
}
}
},
/**
* @description 链接点击事件
* @param {Event} e
*/
linkTap(e) {
const node2 = e.currentTarget ? this.childs[e.currentTarget.dataset.i] : {};
const attrs = node2.attrs || e;
const href = attrs.href;
this.root.$emit("linktap", Object.assign({
innerText: this.root.getText(node2.children || [])
// 链接内的文本内容
}, attrs));
if (href) {
if (href[0] === "#") {
this.root.navigateTo(href.substring(1)).catch(() => {
});
} else if (href.split("?")[0].includes("://")) {
if (this.root.copyLink) {
common_vendor.index.setClipboardData({
data: href,
success: () => common_vendor.index.showToast({
title: "链接已复制"
})
});
}
} else {
common_vendor.index.navigateTo({
url: href,
fail() {
common_vendor.index.switchTab({
url: href,
fail() {
}
});
}
});
}
}
},
/**
* @description 错误事件
* @param {Event} e
*/
mediaError(e) {
const i = e.currentTarget.dataset.i;
const node2 = this.childs[i];
if (node2.name === "video" || node2.name === "audio") {
let index = (this.ctrl[i] || 0) + 1;
if (index > node2.src.length) {
index = 0;
}
if (index < node2.src.length) {
this.$set(this.ctrl, i, index);
return;
}
} else if (node2.name === "img") {
if (this.opts[2]) {
this.$set(this.ctrl, i, -1);
}
this.checkReady();
}
if (this.root) {
this.root.$emit("error", {
source: node2.name,
attrs: node2.attrs,
errMsg: e.detail.errMsg
});
}
}
}
};
if (!Array) {
const _component_node = common_vendor.resolveComponent("node");
_component_node();
}
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return {
a: common_vendor.f($props.childs, (n, i, i0) => {
return common_vendor.e({
a: n.name === "img" && !n.t && ($props.opts[1] && !$data.ctrl[i] || $data.ctrl[i] < 0)
}, n.name === "img" && !n.t && ($props.opts[1] && !$data.ctrl[i] || $data.ctrl[i] < 0) ? {
b: common_vendor.s(n.attrs.style),
c: $data.ctrl[i] < 0 ? $props.opts[2] : $props.opts[1]
} : {}, {
d: n.name === "img" && n.t
}, n.name === "img" && n.t ? {
e: common_vendor.s("display:" + n.t),
f: [{
attrs: {
style: n.attrs.style,
src: n.attrs.src
},
name: "img"
}],
g: i,
h: common_vendor.o((...args) => $options.imgTap && $options.imgTap(...args), i)
} : n.name === "img" ? {
j: n.attrs.id,
k: common_vendor.n("_img " + n.attrs.class),
l: common_vendor.s(($data.ctrl[i] === -1 ? "display:none;" : "") + "width:" + ($data.ctrl[i] || 1) + "px;height:1px;" + n.attrs.style),
m: n.attrs.src,
n: !n.h ? "widthFix" : !n.w ? "heightFix" : "",
o: $props.opts[0],
p: n.webp,
q: $props.opts[3] && !n.attrs.ignore,
r: !$props.opts[3] || n.attrs.ignore,
s: i,
t: common_vendor.o((...args) => $options.imgLoad && $options.imgLoad(...args), i),
v: common_vendor.o((...args) => $options.mediaError && $options.mediaError(...args), i),
w: common_vendor.o((...args) => $options.imgTap && $options.imgTap(...args), i),
x: common_vendor.o((...args) => $options.imgLongTap && $options.imgLongTap(...args), i)
} : n.text ? {
z: common_vendor.t(n.text),
A: $props.opts[4] == "force" && $data.isiOS
} : n.name === "br" ? {} : n.name === "a" ? {
D: "602a2654-0-" + i0,
E: common_vendor.p({
name: "span",
childs: n.children,
opts: $props.opts
}),
F: n.attrs.id,
G: common_vendor.n((n.attrs.href ? "_a " : "") + n.attrs.class),
H: common_vendor.s("display:inline;" + n.attrs.style),
I: i,
J: common_vendor.o((...args) => $options.linkTap && $options.linkTap(...args), i)
} : n.name === "video" ? {
L: n.attrs.id,
M: common_vendor.n(n.attrs.class),
N: common_vendor.s(n.attrs.style),
O: n.attrs.autoplay,
P: n.attrs.controls,
Q: n.attrs.loop,
R: n.attrs.muted,
S: n.attrs["object-fit"],
T: n.attrs.poster,
U: n.src[$data.ctrl[i] || 0],
V: i,
W: common_vendor.o((...args) => $options.play && $options.play(...args), i),
X: common_vendor.o((...args) => $options.mediaError && $options.mediaError(...args), i)
} : n.name === "audio" ? {
Z: n.attrs.id,
aa: common_vendor.n(n.attrs.class),
ab: common_vendor.s(n.attrs.style),
ac: n.attrs.author,
ad: n.attrs.controls,
ae: n.attrs.loop,
af: n.attrs.name,
ag: n.attrs.poster,
ah: n.src[$data.ctrl[i] || 0],
ai: i,
aj: common_vendor.o((...args) => $options.play && $options.play(...args), i),
ak: common_vendor.o((...args) => $options.mediaError && $options.mediaError(...args), i)
} : n.name === "table" && n.c || n.name === "li" ? common_vendor.e({
am: n.name === "li"
}, n.name === "li" ? {
an: "602a2654-1-" + i0,
ao: common_vendor.p({
childs: n.children,
opts: $props.opts
})
} : {
ap: common_vendor.f(n.children, (tbody, x, i1) => {
return common_vendor.e({
a: tbody.name === "td" || tbody.name === "th"
}, tbody.name === "td" || tbody.name === "th" ? {
b: "602a2654-2-" + i0 + "-" + i1,
c: common_vendor.p({
childs: tbody.children,
opts: $props.opts
})
} : {
d: common_vendor.f(tbody.children, (tr, y, i2) => {
return common_vendor.e({
a: tr.name === "td" || tr.name === "th"
}, tr.name === "td" || tr.name === "th" ? {
b: "602a2654-3-" + i0 + "-" + i1 + "-" + i2,
c: common_vendor.p({
childs: tr.children,
opts: $props.opts
}),
d: common_vendor.n("_" + tr.name + " " + tr.attrs.class),
e: common_vendor.s(tr.attrs.style)
} : {
f: common_vendor.f(tr.children, (td, z, i3) => {
return {
a: "602a2654-4-" + i0 + "-" + i1 + "-" + i2 + "-" + i3,
b: common_vendor.p({
childs: td.children,
opts: $props.opts
}),
c: z,
d: common_vendor.n("_" + td.name + " " + td.attrs.class),
e: common_vendor.s(td.attrs.style)
};
}),
g: common_vendor.n("_" + tr.name + " " + tr.attrs.class),
h: common_vendor.s(tr.attrs.style)
}, {
i: y
});
})
}, {
e: x,
f: common_vendor.n("_" + tbody.name + " " + tbody.attrs.class),
g: common_vendor.s(tbody.attrs.style)
});
})
}, {
aq: n.attrs.id,
ar: common_vendor.n("_" + n.name + " " + n.attrs.class),
as: common_vendor.s(n.attrs.style)
}) : !n.c ? {
av: n.attrs.id,
aw: common_vendor.s("display:inline;" + n.f),
ax: $props.opts[4],
ay: $props.opts[4],
az: [n]
} : n.c === 2 ? {
aB: common_vendor.f(n.children, (n2, j, i1) => {
return {
a: j,
b: common_vendor.s(n2.f),
c: "602a2654-5-" + i0 + "-" + i1,
d: common_vendor.p({
name: n2.name,
attrs: n2.attrs,
childs: n2.children,
opts: $props.opts
})
};
}),
aC: n.attrs.id,
aD: common_vendor.n("_block _" + n.name + " " + n.attrs.class),
aE: common_vendor.s(n.f + ";" + n.attrs.style)
} : {
aF: common_vendor.s(n.f),
aG: "602a2654-6-" + i0,
aH: common_vendor.p({
name: n.name,
attrs: n.attrs,
childs: n.children,
opts: $props.opts
})
}, {
i: n.name === "img",
y: n.text,
B: n.name === "br",
C: n.name === "a",
K: n.name === "video",
Y: n.name === "audio",
al: n.name === "table" && n.c || n.name === "li",
at: !n.c,
aA: n.c === 2,
aI: i
});
}),
b: $props.attrs.id,
c: common_vendor.n("_block _" + $props.name + " " + $props.attrs.class),
d: common_vendor.s($props.attrs.style)
};
}
if (typeof block0 === "function") block0(_sfc_main);
const Component = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__file", "/Users/gxwebsoft/APP/gxtyzx-uniapp-cli/src/uni_modules/uv-parse/components/uv-parse/node/node.vue"]]);
wx.createComponent(Component);
const L1VzZXJzL2d4d2Vic29mdC9BUFAvZ3h0eXp4LXVuaWFwcC1jbGkvc3JjL3VuaV9tb2R1bGVzL3V2LXBhcnNlL2NvbXBvbmVudHMvdXYtcGFyc2Uvbm9kZS9ub2RlLnZ1ZQ = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
__proto__: null
}, Symbol.toStringTag, { value: "Module" }));
@@ -0,0 +1,6 @@
{
"component": true,
"usingComponents": {
"node": "./node"
}
}
@@ -0,0 +1,31 @@
<wxs module="handler">
// 行内标签列表
var inlineTags = {
abbr: true,
b: true,
big: true,
code: true,
del: true,
em: true,
i: true,
ins: true,
label: true,
q: true,
small: true,
span: true,
strong: true,
sub: true,
sup: true
}
/**
* @description 判断是否为行内标签
*/
module.exports = {
isInline: function (tagName, style) {
return inlineTags[tagName] || (style || '').indexOf('display:inline') !== -1
}
}
</wxs>
<view id="{{b}}" class="{{c}}" style="{{d}}"><block wx:for="{{a}}" wx:for-item="n" wx:key="aI"><image wx:if="{{n.a}}" class="_img" style="{{n.b}}" src="{{n.c}}" mode="widthFix"/><rich-text wx:if="{{n.d}}" style="{{n.e}}" nodes="{{n.f}}" data-i="{{n.g}}" catchtap="{{n.h}}"/><image wx:elif="{{n.i}}" id="{{n.j}}" class="{{n.k}}" style="{{n.l}}" src="{{n.m}}" mode="{{n.n}}" lazy-load="{{n.o}}" webp="{{n.p}}" show-menu-by-longpress="{{n.q}}" image-menu-prevent="{{n.r}}" data-i="{{n.s}}" bindload="{{n.t}}" binderror="{{n.v}}" catchtap="{{n.w}}" bindlongpress="{{n.x}}"/><text wx:elif="{{n.y}}" user-select="{{n.A}}" decode>{{n.z}}</text><text wx:elif="{{n.B}}">\n</text><view wx:elif="{{n.C}}" id="{{n.F}}" class="{{n.G}}" hover-class="_hover" style="{{n.H}}" data-i="{{n.I}}" catchtap="{{n.J}}"><node wx:if="{{n.E}}" style="display:inherit" u-i="{{n.D}}" bind:__l="__l" u-p="{{n.E}}"/></view><video wx:elif="{{n.K}}" id="{{n.L}}" class="{{n.M}}" style="{{n.N}}" autoplay="{{n.O}}" controls="{{n.P}}" loop="{{n.Q}}" muted="{{n.R}}" object-fit="{{n.S}}" poster="{{n.T}}" src="{{n.U}}" data-i="{{n.V}}" bindplay="{{n.W}}" binderror="{{n.X}}"/><audio wx:elif="{{n.Y}}" id="{{n.Z}}" class="{{n.aa}}" style="{{n.ab}}" author="{{n.ac}}" controls="{{n.ad}}" loop="{{n.ae}}" name="{{n.af}}" poster="{{n.ag}}" src="{{n.ah}}" data-i="{{n.ai}}" bindplay="{{n.aj}}" binderror="{{n.ak}}"/><view wx:elif="{{n.al}}" id="{{n.aq}}" class="{{n.ar}}" style="{{n.as}}"><node wx:if="{{n.am}}" u-i="{{n.an}}" bind:__l="__l" u-p="{{n.ao}}"/><block wx:else><view wx:for="{{n.ap}}" wx:for-item="tbody" wx:key="e" class="{{tbody.f}}" style="{{tbody.g}}"><node wx:if="{{tbody.a}}" u-i="{{tbody.b}}" bind:__l="__l" u-p="{{tbody.c}}"/><block wx:else><block wx:for="{{tbody.d}}" wx:for-item="tr" wx:key="i"><view wx:if="{{tr.a}}" class="{{tr.d}}" style="{{tr.e}}"><node wx:if="{{tr.c}}" u-i="{{tr.b}}" bind:__l="__l" u-p="{{tr.c}}"/></view><view wx:else class="{{tr.g}}" style="{{tr.h}}"><view wx:for="{{tr.f}}" wx:for-item="td" wx:key="c" class="{{td.d}}" style="{{td.e}}"><node wx:if="{{td.b}}" u-i="{{td.a}}" bind:__l="__l" u-p="{{td.b}}"/></view></view></block></block></view></block></view><rich-text wx:elif="{{n.at}}" id="{{n.av}}" style="{{n.aw}}" preview="{{false}}" selectable="{{n.ax}}" user-select="{{n.ay}}" nodes="{{n.az}}"/><view wx:elif="{{n.aA}}" id="{{n.aC}}" class="{{n.aD}}" style="{{n.aE}}"><node wx:for="{{n.aB}}" wx:for-item="n2" wx:key="a" style="{{n2.b}}" u-i="{{n2.c}}" bind:__l="__l" u-p="{{n2.d}}"/></view><node wx:else style="{{n.aF}}" u-i="{{n.aG}}" bind:__l="__l" u-p="{{n.aH||''}}"/></block></view>
@@ -0,0 +1,143 @@
/* a 标签默认效果 */
._a {
padding: 1.5px 0 1.5px 0;
color: #366092;
word-break: break-all;
}
/* a 标签点击态效果 */
._hover {
text-decoration: underline;
opacity: 0.7;
}
/* 图片默认效果 */
._img {
max-width: 100%;
-webkit-touch-callout: none;
}
/* 内部样式 */
._block {
display: block;
}
._b,
._strong {
font-weight: bold;
}
._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: 0.83em;
}
._h6 {
font-size: 0.67em;
}
._h1,
._h2,
._h3,
._h4,
._h5,
._h6 {
display: block;
font-weight: bold;
}
._image {
height: 1px;
}
._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;
}
._thead,
._tbody,
._tfoot {
display: table-row-group;
}
._tr {
display: table-row;
}
._td,
._th {
display: table-cell;
vertical-align: middle;
}
._th {
font-weight: bold;
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;
}
@@ -0,0 +1,978 @@
"use strict";
const common_vendor = require("../../../../common/vendor.js");
const config = {
// 信任的标签(保持标签名不变)
trustTags: makeMap("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"),
// 块级标签(转为 div,其他的非信任标签转为 span)
blockTags: makeMap("address,article,aside,body,caption,center,cite,footer,header,html,nav,pre,section"),
// 行内标签
inlineTags: makeMap("abbr,b,big,code,del,em,i,ins,label,q,small,span,strong,sub,sup"),
// 要移除的标签
ignoreTags: makeMap("area,base,canvas,embed,frame,head,iframe,input,link,map,meta,param,rp,script,source,style,textarea,title,track,wbr"),
// 自闭合的标签
voidTags: makeMap("area,base,br,col,circle,ellipse,embed,frame,hr,img,input,line,link,meta,param,path,polygon,rect,source,track,use,wbr"),
// html 实体
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"
},
// svg 大小写对照表
svgDict: {
animatetransform: "animateTransform",
lineargradient: "linearGradient",
viewbox: "viewBox",
attributename: "attributeName",
repeatcount: "repeatCount",
repeatdur: "repeatDur"
}
};
const tagSelector = {};
const {
windowWidth,
system
} = common_vendor.index.getSystemInfoSync();
const blankChar = makeMap(" ,\r,\n, ,\f");
let idIndex = 0;
function makeMap(str) {
const map = /* @__PURE__ */ Object.create(null);
const list = str.split(",");
for (let i = list.length; i--; ) {
map[list[i]] = true;
}
return map;
}
function decodeEntity(str, amp) {
let i = str.indexOf("&");
while (i !== -1) {
const j = str.indexOf(";", i + 3);
let code;
if (j === -1) break;
if (str[i + 1] === "#") {
code = parseInt((str[i + 2] === "x" ? "0" : "") + str.substring(i + 2, j));
if (!isNaN(code)) {
str = str.substr(0, i) + String.fromCharCode(code) + str.substr(j + 1);
}
} else {
code = str.substring(i + 1, j);
if (config.entities[code] || code === "amp" && amp) {
str = str.substr(0, i) + (config.entities[code] || "&") + str.substr(j + 1);
}
}
i = str.indexOf("&", i + 1);
}
return str;
}
function mergeNodes(nodes) {
let i = nodes.length - 1;
for (let j = i; j >= -1; j--) {
if (j === -1 || nodes[j].c || !nodes[j].name || nodes[j].name !== "div" && nodes[j].name !== "p" && nodes[j].name[0] !== "h" || (nodes[j].attrs.style || "").includes("inline")) {
if (i - j >= 5) {
nodes.splice(j + 1, i - j, {
name: "div",
attrs: {},
children: nodes.slice(j + 1, i + 1)
});
}
i = j - 1;
}
}
}
function Parser(vm) {
this.options = vm || {};
this.tagStyle = Object.assign({}, config.tagStyle, this.options.tagStyle);
this.imgList = vm.imgList || [];
this.imgList._unloadimgs = 0;
this.plugins = vm.plugins || [];
this.attrs = /* @__PURE__ */ Object.create(null);
this.stack = [];
this.nodes = [];
this.pre = (this.options.containerStyle || "").includes("white-space") && this.options.containerStyle.includes("pre") ? 2 : 0;
}
Parser.prototype.parse = function(content) {
for (let i = this.plugins.length; i--; ) {
if (this.plugins[i].onUpdate) {
content = this.plugins[i].onUpdate(content, config) || content;
}
}
new Lexer(this).parse(content);
while (this.stack.length) {
this.popNode();
}
if (this.nodes.length > 50) {
mergeNodes(this.nodes);
}
return this.nodes;
};
Parser.prototype.expose = function() {
for (let i = this.stack.length; i--; ) {
const item = this.stack[i];
if (item.c || item.name === "a" || item.name === "video" || item.name === "audio") return;
item.c = 1;
}
};
Parser.prototype.hook = function(node) {
for (let i = this.plugins.length; i--; ) {
if (this.plugins[i].onParse && this.plugins[i].onParse(node, this) === false) {
return false;
}
}
return true;
};
Parser.prototype.getUrl = function(url) {
const domain = this.options.domain;
if (url[0] === "/") {
if (url[1] === "/") {
url = (domain ? domain.split("://")[0] : "http") + ":" + url;
} else if (domain) {
url = domain + url;
}
} else if (!url.includes("data:") && !url.includes("://")) {
if (domain) {
url = domain + "/" + url;
}
}
return url;
};
Parser.prototype.parseStyle = function(node) {
const attrs = node.attrs;
const list = (this.tagStyle[node.name] || "").split(";").concat((attrs.style || "").split(";"));
const styleObj = {};
let tmp = "";
if (attrs.id && !this.xml) {
if (this.options.useAnchor) {
this.expose();
} else if (node.name !== "img" && node.name !== "a" && node.name !== "video" && node.name !== "audio") {
attrs.id = void 0;
}
}
if (attrs.width) {
styleObj.width = parseFloat(attrs.width) + (attrs.width.includes("%") ? "%" : "px");
attrs.width = void 0;
}
if (attrs.height) {
styleObj.height = parseFloat(attrs.height) + (attrs.height.includes("%") ? "%" : "px");
attrs.height = void 0;
}
for (let i = 0, len = list.length; i < len; i++) {
const info = list[i].split(":");
if (info.length < 2) continue;
const key = info.shift().trim().toLowerCase();
let value = info.join(":").trim();
if (value[0] === "-" && value.lastIndexOf("-") > 0 || value.includes("safe")) {
tmp += `;${key}:${value}`;
} else if (!styleObj[key] || value.includes("import") || !styleObj[key].includes("import")) {
if (value.includes("url")) {
let j = value.indexOf("(") + 1;
if (j) {
while (value[j] === '"' || value[j] === "'" || blankChar[value[j]]) {
j++;
}
value = value.substr(0, j) + this.getUrl(value.substr(j));
}
} else if (value.includes("rpx")) {
value = value.replace(/[0-9.]+\s*rpx/g, ($) => parseFloat($) * windowWidth / 750 + "px");
}
styleObj[key] = value;
}
}
node.attrs.style = tmp;
return styleObj;
};
Parser.prototype.onTagName = function(name) {
this.tagName = this.xml ? name : name.toLowerCase();
if (this.tagName === "svg") {
this.xml = (this.xml || 0) + 1;
config.ignoreTags.style = void 0;
}
};
Parser.prototype.onAttrName = function(name) {
name = this.xml ? name : name.toLowerCase();
if (name.substr(0, 5) === "data-") {
if (name === "data-src" && !this.attrs.src) {
this.attrName = "src";
} else if (this.tagName === "img" || this.tagName === "a") {
this.attrName = name;
} else {
this.attrName = void 0;
}
} else {
this.attrName = name;
this.attrs[name] = "T";
}
};
Parser.prototype.onAttrVal = function(val) {
const name = this.attrName || "";
if (name === "style" || name === "href") {
this.attrs[name] = decodeEntity(val, true);
} else if (name.includes("src")) {
this.attrs[name] = this.getUrl(decodeEntity(val, true));
} else if (name) {
this.attrs[name] = val;
}
};
Parser.prototype.onOpenTag = function(selfClose) {
const node = /* @__PURE__ */ Object.create(null);
node.name = this.tagName;
node.attrs = this.attrs;
if (this.options.nodes.length) {
node.type = "node";
}
this.attrs = /* @__PURE__ */ Object.create(null);
const attrs = node.attrs;
const parent = this.stack[this.stack.length - 1];
const siblings = parent ? parent.children : this.nodes;
const close = this.xml ? selfClose : config.voidTags[node.name];
if (tagSelector[node.name]) {
attrs.class = tagSelector[node.name] + (attrs.class ? " " + attrs.class : "");
}
if (node.name === "embed") {
const src = attrs.src || "";
if (src.includes(".mp4") || src.includes(".3gp") || src.includes(".m3u8") || (attrs.type || "").includes("video")) {
node.name = "video";
} else if (src.includes(".mp3") || src.includes(".wav") || src.includes(".aac") || src.includes(".m4a") || (attrs.type || "").includes("audio")) {
node.name = "audio";
}
if (attrs.autostart) {
attrs.autoplay = "T";
}
attrs.controls = "T";
}
if (node.name === "video" || node.name === "audio") {
if (node.name === "video" && !attrs.id) {
attrs.id = "v" + idIndex++;
}
if (!attrs.controls && !attrs.autoplay) {
attrs.controls = "T";
}
node.src = [];
if (attrs.src) {
node.src.push(attrs.src);
attrs.src = void 0;
}
this.expose();
}
if (close) {
if (!this.hook(node) || config.ignoreTags[node.name]) {
if (node.name === "base" && !this.options.domain) {
this.options.domain = attrs.href;
} else if (node.name === "source" && parent && (parent.name === "video" || parent.name === "audio") && attrs.src) {
parent.src.push(attrs.src);
}
return;
}
const styleObj = this.parseStyle(node);
if (node.name === "img") {
if (attrs.src) {
if (attrs.src.includes("webp")) {
node.webp = "T";
}
if (attrs.src.includes("data:") && !attrs["original-src"]) {
attrs.ignore = "T";
}
if (!attrs.ignore || node.webp || attrs.src.includes("cloud://")) {
for (let i = this.stack.length; i--; ) {
const item = this.stack[i];
if (item.name === "a") {
node.a = item.attrs;
}
if (item.name === "table" && !node.webp && !attrs.src.includes("cloud://")) {
if (!styleObj.display || styleObj.display.includes("inline")) {
node.t = "inline-block";
} else {
node.t = styleObj.display;
}
styleObj.display = void 0;
}
const style = item.attrs.style || "";
if (style.includes("flex:") && !style.includes("flex:0") && !style.includes("flex: 0") && (!styleObj.width || parseInt(styleObj.width) > 100)) {
styleObj.width = "100% !important";
styleObj.height = "";
for (let j = i + 1; j < this.stack.length; j++) {
this.stack[j].attrs.style = (this.stack[j].attrs.style || "").replace("inline-", "");
}
} else if (style.includes("flex") && styleObj.width === "100%") {
for (let j = i + 1; j < this.stack.length; j++) {
const style2 = this.stack[j].attrs.style || "";
if (!style2.includes(";width") && !style2.includes(" width") && style2.indexOf("width") !== 0) {
styleObj.width = "";
break;
}
}
} else if (style.includes("inline-block")) {
if (styleObj.width && styleObj.width[styleObj.width.length - 1] === "%") {
item.attrs.style += ";max-width:" + styleObj.width;
styleObj.width = "";
} else {
item.attrs.style += ";max-width:100%";
}
}
item.c = 1;
}
attrs.i = this.imgList.length.toString();
let src = attrs["original-src"] || attrs.src;
if (this.imgList.includes(src)) {
let i = src.indexOf("://");
if (i !== -1) {
i += 3;
let newSrc = src.substr(0, i);
for (; i < src.length; i++) {
if (src[i] === "/") break;
newSrc += Math.random() > 0.5 ? src[i].toUpperCase() : src[i];
}
newSrc += src.substr(i);
src = newSrc;
}
}
this.imgList.push(src);
if (!node.t) {
this.imgList._unloadimgs += 1;
}
}
}
if (styleObj.display === "inline") {
styleObj.display = "";
}
if (attrs.ignore) {
styleObj["max-width"] = styleObj["max-width"] || "100%";
attrs.style += ";-webkit-touch-callout:none";
}
if (parseInt(styleObj.width) > windowWidth) {
styleObj.height = void 0;
}
if (!isNaN(parseInt(styleObj.width))) {
node.w = "T";
}
if (!isNaN(parseInt(styleObj.height)) && (!styleObj.height.includes("%") || parent && (parent.attrs.style || "").includes("height"))) {
node.h = "T";
}
} else if (node.name === "svg") {
siblings.push(node);
this.stack.push(node);
this.popNode();
return;
}
for (const key in styleObj) {
if (styleObj[key]) {
attrs.style += `;${key}:${styleObj[key].replace(" !important", "")}`;
}
}
attrs.style = attrs.style.substr(1) || void 0;
if (!attrs.style) {
delete attrs.style;
}
} else {
if ((node.name === "pre" || (attrs.style || "").includes("white-space") && attrs.style.includes("pre")) && this.pre !== 2) {
this.pre = node.pre = 1;
}
node.children = [];
this.stack.push(node);
}
siblings.push(node);
};
Parser.prototype.onCloseTag = function(name) {
name = this.xml ? name : name.toLowerCase();
let i;
for (i = this.stack.length; i--; ) {
if (this.stack[i].name === name) break;
}
if (i !== -1) {
while (this.stack.length > i) {
this.popNode();
}
} else if (name === "p" || name === "br") {
const siblings = this.stack.length ? this.stack[this.stack.length - 1].children : this.nodes;
siblings.push({
name,
attrs: {
class: tagSelector[name] || "",
style: this.tagStyle[name] || ""
}
});
}
};
Parser.prototype.popNode = function() {
const node = this.stack.pop();
let attrs = node.attrs;
const children = node.children;
const parent = this.stack[this.stack.length - 1];
const siblings = parent ? parent.children : this.nodes;
if (!this.hook(node) || config.ignoreTags[node.name]) {
if (node.name === "title" && children.length && children[0].type === "text" && this.options.setTitle) {
common_vendor.index.setNavigationBarTitle({
title: children[0].text
});
}
siblings.pop();
return;
}
if (node.pre && this.pre !== 2) {
this.pre = node.pre = void 0;
for (let i = this.stack.length; i--; ) {
if (this.stack[i].pre) {
this.pre = 1;
}
}
}
const styleObj = {};
if (node.name === "svg") {
if (this.xml > 1) {
this.xml--;
return;
}
let src = "";
const style = attrs.style;
attrs.style = "";
attrs.xmlns = "http://www.w3.org/2000/svg";
(function traversal(node2) {
if (node2.type === "text") {
src += node2.text;
return;
}
const name = config.svgDict[node2.name] || node2.name;
src += "<" + name;
for (const item in node2.attrs) {
const val = node2.attrs[item];
if (val) {
src += ` ${config.svgDict[item] || item}="${val}"`;
}
}
if (!node2.children) {
src += "/>";
} else {
src += ">";
for (let i = 0; i < node2.children.length; i++) {
traversal(node2.children[i]);
}
src += "</" + name + ">";
}
})(node);
node.name = "img";
node.attrs = {
src: "data:image/svg+xml;utf8," + src.replace(/#/g, "%23"),
style,
ignore: "T"
};
node.children = void 0;
this.xml = false;
config.ignoreTags.style = true;
return;
}
if (attrs.align) {
if (node.name === "table") {
if (attrs.align === "center") {
styleObj["margin-inline-start"] = styleObj["margin-inline-end"] = "auto";
} else {
styleObj.float = attrs.align;
}
} else {
styleObj["text-align"] = attrs.align;
}
attrs.align = void 0;
}
if (attrs.dir) {
styleObj.direction = attrs.dir;
attrs.dir = void 0;
}
if (node.name === "font") {
if (attrs.color) {
styleObj.color = attrs.color;
attrs.color = void 0;
}
if (attrs.face) {
styleObj["font-family"] = attrs.face;
attrs.face = void 0;
}
if (attrs.size) {
let size = parseInt(attrs.size);
if (!isNaN(size)) {
if (size < 1) {
size = 1;
} else if (size > 7) {
size = 7;
}
styleObj["font-size"] = ["x-small", "small", "medium", "large", "x-large", "xx-large", "xxx-large"][size - 1];
}
attrs.size = void 0;
}
}
if ((attrs.class || "").includes("align-center")) {
styleObj["text-align"] = "center";
}
Object.assign(styleObj, this.parseStyle(node));
if (node.name !== "table" && parseInt(styleObj.width) > windowWidth) {
styleObj["max-width"] = "100%";
styleObj["box-sizing"] = "border-box";
}
if (config.blockTags[node.name]) {
node.name = "div";
} else if (!config.trustTags[node.name] && !this.xml) {
node.name = "span";
}
if (node.name === "a" || node.name === "ad") {
this.expose();
} else if (node.name === "video") {
if ((styleObj.height || "").includes("auto")) {
styleObj.height = void 0;
}
} else if ((node.name === "ul" || node.name === "ol") && node.c) {
const types = {
a: "lower-alpha",
A: "upper-alpha",
i: "lower-roman",
I: "upper-roman"
};
if (types[attrs.type]) {
attrs.style += ";list-style-type:" + types[attrs.type];
attrs.type = void 0;
}
for (let i = children.length; i--; ) {
if (children[i].name === "li") {
children[i].c = 1;
}
}
} else if (node.name === "table") {
let padding = parseFloat(attrs.cellpadding);
let spacing = parseFloat(attrs.cellspacing);
const border = parseFloat(attrs.border);
const bordercolor = styleObj["border-color"];
const borderstyle = styleObj["border-style"];
if (node.c) {
if (isNaN(padding)) {
padding = 2;
}
if (isNaN(spacing)) {
spacing = 2;
}
}
if (border) {
attrs.style += `;border:${border}px ${borderstyle || "solid"} ${bordercolor || "gray"}`;
}
if (node.flag && node.c) {
styleObj.display = "grid";
if (spacing) {
styleObj["grid-gap"] = spacing + "px";
styleObj.padding = spacing + "px";
} else if (border) {
attrs.style += ";border-left:0;border-top:0";
}
const width = [];
const trList = [];
const cells = [];
const map = {};
(function traversal(nodes) {
for (let i = 0; i < nodes.length; i++) {
if (nodes[i].name === "tr") {
trList.push(nodes[i]);
} else {
traversal(nodes[i].children || []);
}
}
})(children);
for (let row = 1; row <= trList.length; row++) {
let col = 1;
for (let j = 0; j < trList[row - 1].children.length; j++) {
const td = trList[row - 1].children[j];
if (td.name === "td" || td.name === "th") {
while (map[row + "." + col]) {
col++;
}
let style = td.attrs.style || "";
let start = style.indexOf("width") ? style.indexOf(";width") : 0;
if (start !== -1) {
let end = style.indexOf(";", start + 6);
if (end === -1) {
end = style.length;
}
if (!td.attrs.colspan) {
width[col] = style.substring(start ? start + 7 : 6, end);
}
style = style.substr(0, start) + style.substr(end);
}
style += ";display:flex";
start = style.indexOf("vertical-align");
if (start !== -1) {
const val = style.substr(start + 15, 10);
if (val.includes("middle")) {
style += ";align-items:center";
} else if (val.includes("bottom")) {
style += ";align-items:flex-end";
}
} else {
style += ";align-items:center";
}
start = style.indexOf("text-align");
if (start !== -1) {
const val = style.substr(start + 11, 10);
if (val.includes("center")) {
style += ";justify-content: center";
} else if (val.includes("right")) {
style += ";justify-content: right";
}
}
style = (border ? `;border:${border}px ${borderstyle || "solid"} ${bordercolor || "gray"}` + (spacing ? "" : ";border-right:0;border-bottom:0") : "") + (padding ? `;padding:${padding}px` : "") + ";" + style;
if (td.attrs.colspan) {
style += `;grid-column-start:${col};grid-column-end:${col + parseInt(td.attrs.colspan)}`;
if (!td.attrs.rowspan) {
style += `;grid-row-start:${row};grid-row-end:${row + 1}`;
}
col += parseInt(td.attrs.colspan) - 1;
}
if (td.attrs.rowspan) {
style += `;grid-row-start:${row};grid-row-end:${row + parseInt(td.attrs.rowspan)}`;
if (!td.attrs.colspan) {
style += `;grid-column-start:${col};grid-column-end:${col + 1}`;
}
for (let rowspan = 1; rowspan < td.attrs.rowspan; rowspan++) {
for (let colspan = 0; colspan < (td.attrs.colspan || 1); colspan++) {
map[row + rowspan + "." + (col - colspan)] = 1;
}
}
}
if (style) {
td.attrs.style = style;
}
cells.push(td);
col++;
}
}
if (row === 1) {
let temp = "";
for (let i = 1; i < col; i++) {
temp += (width[i] ? width[i] : "auto") + " ";
}
styleObj["grid-template-columns"] = temp;
}
}
node.children = cells;
} else {
if (node.c) {
styleObj.display = "table";
}
if (!isNaN(spacing)) {
styleObj["border-spacing"] = spacing + "px";
}
if (border || padding) {
(function traversal(nodes) {
for (let i = 0; i < nodes.length; i++) {
const td = nodes[i];
if (td.name === "th" || td.name === "td") {
if (border) {
td.attrs.style = `border:${border}px ${borderstyle || "solid"} ${bordercolor || "gray"};${td.attrs.style || ""}`;
}
if (padding) {
td.attrs.style = `padding:${padding}px;${td.attrs.style || ""}`;
}
} else if (td.children) {
traversal(td.children);
}
}
})(children);
}
}
if (this.options.scrollTable && !(attrs.style || "").includes("inline")) {
const table = Object.assign({}, node);
node.name = "div";
node.attrs = {
style: "overflow:auto"
};
node.children = [table];
attrs = table.attrs;
}
} else if ((node.name === "td" || node.name === "th") && (attrs.colspan || attrs.rowspan)) {
for (let i = this.stack.length; i--; ) {
if (this.stack[i].name === "table") {
this.stack[i].flag = 1;
break;
}
}
} else if (node.name === "ruby") {
node.name = "span";
for (let i = 0; i < children.length - 1; i++) {
if (children[i].type === "text" && children[i + 1].name === "rt") {
children[i] = {
name: "div",
attrs: {
style: "display:inline-block;text-align:center"
},
children: [{
name: "div",
attrs: {
style: "font-size:50%;" + (children[i + 1].attrs.style || "")
},
children: children[i + 1].children
}, children[i]]
};
children.splice(i + 1, 1);
}
}
} else if (node.c) {
(function traversal(node2) {
node2.c = 2;
for (let i = node2.children.length; i--; ) {
const child = node2.children[i];
if (child.name && (config.inlineTags[child.name] || (child.attrs.style || "").includes("inline") && child.children) && !child.c) {
traversal(child);
}
if (!child.c || child.name === "table") {
node2.c = 1;
}
}
})(node);
}
if ((styleObj.display || "").includes("flex") && !node.c) {
for (let i = children.length; i--; ) {
const item = children[i];
if (item.f) {
item.attrs.style = (item.attrs.style || "") + item.f;
item.f = void 0;
}
}
}
const flex = parent && ((parent.attrs.style || "").includes("flex") || (parent.attrs.style || "").includes("grid")) && !(node.c && common_vendor.wx$1.getNFCAdapter);
if (flex) {
node.f = ";max-width:100%";
}
if (children.length >= 50 && node.c && !(styleObj.display || "").includes("flex")) {
mergeNodes(children);
}
for (const key in styleObj) {
if (styleObj[key]) {
const val = `;${key}:${styleObj[key].replace(" !important", "")}`;
if (flex && (key.includes("flex") && key !== "flex-direction" || key === "align-self" || key.includes("grid") || styleObj[key][0] === "-" || key.includes("width") && val.includes("%"))) {
node.f += val;
if (key === "width") {
attrs.style += ";width:100%";
}
} else {
attrs.style += val;
}
}
}
attrs.style = attrs.style.substr(1) || void 0;
for (const key in attrs) {
if (!attrs[key]) {
delete attrs[key];
}
}
};
Parser.prototype.onText = function(text) {
if (!this.pre) {
let trim = "";
let flag;
for (let i = 0, len = text.length; i < len; i++) {
if (!blankChar[text[i]]) {
trim += text[i];
} else {
if (trim[trim.length - 1] !== " ") {
trim += " ";
}
if (text[i] === "\n" && !flag) {
flag = true;
}
}
}
if (trim === " ") {
if (flag) return;
else {
const parent = this.stack[this.stack.length - 1];
if (parent && parent.name[0] === "t") return;
}
}
text = trim;
}
const node = /* @__PURE__ */ Object.create(null);
node.type = "text";
node.text = decodeEntity(text);
if (this.hook(node)) {
if (this.options.selectable === "force" && system.includes("iOS") && !common_vendor.index.canIUse("rich-text.user-select")) {
this.expose();
}
const siblings = this.stack.length ? this.stack[this.stack.length - 1].children : this.nodes;
siblings.push(node);
}
};
function Lexer(handler) {
this.handler = handler;
}
Lexer.prototype.parse = function(content) {
this.content = content || "";
this.i = 0;
this.start = 0;
this.state = this.text;
for (let len = this.content.length; this.i !== -1 && this.i < len; ) {
this.state();
}
};
Lexer.prototype.checkClose = function(method) {
const selfClose = this.content[this.i] === "/";
if (this.content[this.i] === ">" || selfClose && this.content[this.i + 1] === ">") {
if (method) {
this.handler[method](this.content.substring(this.start, this.i));
}
this.i += selfClose ? 2 : 1;
this.start = this.i;
this.handler.onOpenTag(selfClose);
if (this.handler.tagName === "script") {
this.i = this.content.indexOf("</", this.i);
if (this.i !== -1) {
this.i += 2;
this.start = this.i;
}
this.state = this.endTag;
} else {
this.state = this.text;
}
return true;
}
return false;
};
Lexer.prototype.text = function() {
this.i = this.content.indexOf("<", this.i);
if (this.i === -1) {
if (this.start < this.content.length) {
this.handler.onText(this.content.substring(this.start, this.content.length));
}
return;
}
const c = this.content[this.i + 1];
if (c >= "a" && c <= "z" || c >= "A" && c <= "Z") {
if (this.start !== this.i) {
this.handler.onText(this.content.substring(this.start, this.i));
}
this.start = ++this.i;
this.state = this.tagName;
} else if (c === "/" || c === "!" || c === "?") {
if (this.start !== this.i) {
this.handler.onText(this.content.substring(this.start, this.i));
}
const next = this.content[this.i + 2];
if (c === "/" && (next >= "a" && next <= "z" || next >= "A" && next <= "Z")) {
this.i += 2;
this.start = this.i;
this.state = this.endTag;
return;
}
let end = "-->";
if (c !== "!" || this.content[this.i + 2] !== "-" || this.content[this.i + 3] !== "-") {
end = ">";
}
this.i = this.content.indexOf(end, this.i);
if (this.i !== -1) {
this.i += end.length;
this.start = this.i;
}
} else {
this.i++;
}
};
Lexer.prototype.tagName = function() {
if (blankChar[this.content[this.i]]) {
this.handler.onTagName(this.content.substring(this.start, this.i));
while (blankChar[this.content[++this.i]]) ;
if (this.i < this.content.length && !this.checkClose()) {
this.start = this.i;
this.state = this.attrName;
}
} else if (!this.checkClose("onTagName")) {
this.i++;
}
};
Lexer.prototype.attrName = function() {
let c = this.content[this.i];
if (blankChar[c] || c === "=") {
this.handler.onAttrName(this.content.substring(this.start, this.i));
let needVal = c === "=";
const len = this.content.length;
while (++this.i < len) {
c = this.content[this.i];
if (!blankChar[c]) {
if (this.checkClose()) return;
if (needVal) {
this.start = this.i;
this.state = this.attrVal;
return;
}
if (this.content[this.i] === "=") {
needVal = true;
} else {
this.start = this.i;
this.state = this.attrName;
return;
}
}
}
} else if (!this.checkClose("onAttrName")) {
this.i++;
}
};
Lexer.prototype.attrVal = function() {
const c = this.content[this.i];
const len = this.content.length;
if (c === '"' || c === "'") {
this.start = ++this.i;
this.i = this.content.indexOf(c, this.i);
if (this.i === -1) return;
this.handler.onAttrVal(this.content.substring(this.start, this.i));
} else {
for (; this.i < len; this.i++) {
if (blankChar[this.content[this.i]]) {
this.handler.onAttrVal(this.content.substring(this.start, this.i));
break;
} else if (this.checkClose("onAttrVal")) return;
}
}
while (blankChar[this.content[++this.i]]) ;
if (this.i < len && !this.checkClose()) {
this.start = this.i;
this.state = this.attrName;
}
};
Lexer.prototype.endTag = function() {
const c = this.content[this.i];
if (blankChar[c] || c === ">" || c === "/") {
this.handler.onCloseTag(this.content.substring(this.start, this.i));
if (c !== ">") {
this.i = this.content.indexOf(">", this.i);
if (this.i === -1) return;
}
this.start = ++this.i;
this.state = this.text;
} else {
this.i++;
}
};
exports.Parser = Parser;
@@ -0,0 +1,267 @@
"use strict";
const common_vendor = require("../../../../common/vendor.js");
const uni_modules_uvParse_components_uvParse_parser = require("./parser.js");
const node = () => "./node/node.js";
const plugins = [];
const _sfc_main = {
name: "uv-parse",
data() {
return {
nodes: []
};
},
props: {
containerStyle: {
type: String,
default: ""
},
content: {
type: String,
default: ""
},
copyLink: {
type: [Boolean, String],
default: true
},
domain: String,
errorImg: {
type: String,
default: ""
},
lazyLoad: {
type: [Boolean, String],
default: false
},
loadingImg: {
type: String,
default: ""
},
pauseVideo: {
type: [Boolean, String],
default: true
},
previewImg: {
type: [Boolean, String],
default: true
},
scrollTable: [Boolean, String],
selectable: [Boolean, String],
setTitle: {
type: [Boolean, String],
default: true
},
showImgMenu: {
type: [Boolean, String],
default: true
},
tagStyle: Object,
useAnchor: [Boolean, Number]
},
emits: ["load", "ready", "imgtap", "linktap", "play", "error"],
components: {
node
},
watch: {
content(content) {
this.setContent(content);
}
},
created() {
this.plugins = [];
for (let i = plugins.length; i--; ) {
this.plugins.push(new plugins[i](this));
}
},
mounted() {
if (this.content && !this.nodes.length) {
this.setContent(this.content);
}
},
beforeDestroy() {
this._hook("onDetached");
},
methods: {
/**
* @description 将锚点跳转的范围限定在一个 scroll-view 内
* @param {Object} page scroll-view 所在页面的示例
* @param {String} selector scroll-view 的选择器
* @param {String} scrollTop scroll-view scroll-top 属性绑定的变量名
*/
in(page, selector, scrollTop) {
if (page && selector && scrollTop) {
this._in = {
page,
selector,
scrollTop
};
}
},
/**
* @description 锚点跳转
* @param {String} id 要跳转的锚点 id
* @param {Number} offset 跳转位置的偏移量
* @returns {Promise}
*/
navigateTo(id, offset) {
return new Promise((resolve, reject) => {
if (!this.useAnchor) {
reject(Error("Anchor is disabled"));
return;
}
offset = offset || parseInt(this.useAnchor) || 0;
let deep = " ";
deep = ">>>";
const selector = common_vendor.index.createSelectorQuery().in(this._in ? this._in.page : this).select((this._in ? this._in.selector : "._root") + (id ? `${deep}#${id}` : "")).boundingClientRect();
if (this._in) {
selector.select(this._in.selector).scrollOffset().select(this._in.selector).boundingClientRect();
} else {
selector.selectViewport().scrollOffset();
}
selector.exec((res) => {
if (!res[0]) {
reject(Error("Label not found"));
return;
}
const scrollTop = res[1].scrollTop + res[0].top - (res[2] ? res[2].top : 0) + offset;
if (this._in) {
this._in.page[this._in.scrollTop] = scrollTop;
} else {
common_vendor.index.pageScrollTo({
scrollTop,
duration: 300
});
}
resolve();
});
});
},
/**
* @description 获取文本内容
* @return {String}
*/
getText(nodes) {
let text = "";
(function traversal(nodes2) {
for (let i = 0; i < nodes2.length; i++) {
const node2 = nodes2[i];
if (node2.type === "text") {
text += node2.text.replace(/&amp;/g, "&");
} else if (node2.name === "br") {
text += "\n";
} else {
const isBlock = node2.name === "p" || node2.name === "div" || node2.name === "tr" || node2.name === "li" || node2.name[0] === "h" && node2.name[1] > "0" && node2.name[1] < "7";
if (isBlock && text && text[text.length - 1] !== "\n") {
text += "\n";
}
if (node2.children) {
traversal(node2.children);
}
if (isBlock && text[text.length - 1] !== "\n") {
text += "\n";
} else if (node2.name === "td" || node2.name === "th") {
text += " ";
}
}
}
})(nodes || this.nodes);
return text;
},
/**
* @description 获取内容大小和位置
* @return {Promise}
*/
getRect() {
return new Promise((resolve, reject) => {
common_vendor.index.createSelectorQuery().in(this).select("#_root").boundingClientRect().exec((res) => res[0] ? resolve(res[0]) : reject(Error("Root label not found")));
});
},
/**
* @description 暂停播放媒体
*/
pauseMedia() {
for (let i = (this._videos || []).length; i--; ) {
this._videos[i].pause();
}
},
/**
* @description 设置媒体播放速率
* @param {Number} rate 播放速率
*/
setPlaybackRate(rate) {
this.playbackRate = rate;
for (let i = (this._videos || []).length; i--; ) {
this._videos[i].playbackRate(rate);
}
},
/**
* @description 设置内容
* @param {String} content html 内容
* @param {Boolean} append 是否在尾部追加
*/
setContent(content, append) {
if (!append || !this.imgList) {
this.imgList = [];
}
const nodes = new uni_modules_uvParse_components_uvParse_parser.Parser(this).parse(content);
this.$set(this, "nodes", append ? (this.nodes || []).concat(nodes) : nodes);
this._videos = [];
this.$nextTick(() => {
this._hook("onLoad");
this.$emit("load");
});
if (this.lazyLoad || this.imgList._unloadimgs < this.imgList.length / 2) {
let height = 0;
const callback = (rect) => {
if (!rect || !rect.height) rect = {};
if (rect.height === height) {
this.$emit("ready", rect);
} else {
height = rect.height;
setTimeout(() => {
this.getRect().then(callback).catch(callback);
}, 350);
}
};
this.getRect().then(callback).catch(callback);
} else {
if (!this.imgList._unloadimgs) {
this.getRect().then((rect) => {
this.$emit("ready", rect);
}).catch(() => {
this.$emit("ready", {});
});
}
}
},
/**
* @description 调用插件钩子函数
*/
_hook(name) {
for (let i = plugins.length; i--; ) {
if (this.plugins[i][name]) {
this.plugins[i][name]();
}
}
}
}
};
if (!Array) {
const _component_node = common_vendor.resolveComponent("node");
_component_node();
}
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return common_vendor.e({
a: !$data.nodes[0]
}, !$data.nodes[0] ? {} : {
b: common_vendor.p({
childs: $data.nodes,
opts: [$props.lazyLoad, $props.loadingImg, $props.errorImg, $props.showImgMenu, $props.selectable],
name: "span"
})
}, {
c: common_vendor.n(($props.selectable ? "_select " : "") + "_root"),
d: common_vendor.s($props.containerStyle)
});
}
const Component = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__file", "/Users/gxwebsoft/APP/gxtyzx-uniapp-cli/src/uni_modules/uv-parse/components/uv-parse/uv-parse.vue"]]);
wx.createComponent(Component);
@@ -0,0 +1,6 @@
{
"component": true,
"usingComponents": {
"node": "./node/node"
}
}
@@ -0,0 +1 @@
<view id="_root" class="{{c}}" style="{{d}}"><slot wx:if="{{a}}"/><node wx:else u-i="31b4f8b2-0" bind:__l="__l" u-p="{{b||''}}"/></view>
@@ -0,0 +1,17 @@
/* 根节点样式 */
._root {
padding: 1px 0;
overflow-x: auto;
overflow-y: hidden;
-webkit-overflow-scrolling: touch;
}
/* 长按复制 */
._select {
-webkit-user-select: text;
-moz-user-select: text;
user-select: text;
}