Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Velpro187
uni-app
提交
ec8d177f
U
uni-app
项目概览
Velpro187
/
uni-app
与 Fork 源项目一致
Fork自
DCloud / uni-app
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
uni-app
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
ec8d177f
编写于
11月 02, 2021
作者:
D
DCloud_LXH
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat: rich-text support itemclick event
上级
4f8ad863
变更
6
展开全部
隐藏空白更改
内联
并排
Showing
6 changed file
with
1981 addition
and
1901 deletion
+1981
-1901
packages/uni-components/src/components/rich-text/index.tsx
packages/uni-components/src/components/rich-text/index.tsx
+22
-3
packages/uni-components/src/components/rich-text/nodes-parser.js
...s/uni-components/src/components/rich-text/nodes-parser.js
+23
-2
packages/uni-h5/dist/uni-h5.cjs.js
packages/uni-h5/dist/uni-h5.cjs.js
+24
-4
packages/uni-h5/dist/uni-h5.es.js
packages/uni-h5/dist/uni-h5.es.js
+24
-4
packages/uni-stat/dist/uni-stat.cjs.js
packages/uni-stat/dist/uni-stat.cjs.js
+944
-944
packages/uni-stat/dist/uni-stat.es.js
packages/uni-stat/dist/uni-stat.es.js
+944
-944
未找到文件。
packages/uni-components/src/components/rich-text/index.tsx
浏览文件 @
ec8d177f
import
{
onMounted
,
ref
,
watch
,
getCurrentInstance
}
from
'
vue
'
import
{
defineBuiltInComponent
}
from
'
@dcloudio/uni-components
'
import
{
defineBuiltInComponent
,
useCustomEvent
,
EmitEvent
,
}
from
'
@dcloudio/uni-components
'
import
parseHtml
from
'
./html-parser
'
import
parseNodes
from
'
./nodes-parser
'
...
...
@@ -18,9 +22,23 @@ export default /*#__PURE__*/ defineBuiltInComponent({
MODE
:
3
,
},
props
,
setup
(
props
)
{
emits
:
[
'
click
'
,
'
touchstart
'
,
'
touchmove
'
,
'
touchcancel
'
,
'
touchend
'
,
'
longpress
'
,
],
setup
(
props
,
{
emit
,
attrs
})
{
const
vm
=
getCurrentInstance
()
const
rootRef
=
ref
<
HTMLElement
|
null
>
(
null
)
const
trigger
=
useCustomEvent
<
EmitEvent
<
typeof
emit
>>
(
rootRef
,
emit
)
const
hasItemClick
=
!!
attrs
.
onItemclick
function
triggerItemClick
(
e
:
Event
,
detail
=
{})
{
trigger
(
'
itemclick
'
,
e
,
detail
)
}
function
_renderNodes
(
nodes
:
string
|
unknown
[])
{
if
(
typeof
nodes
===
'
string
'
)
{
...
...
@@ -29,7 +47,8 @@ export default /*#__PURE__*/ defineBuiltInComponent({
const
nodeList
=
parseNodes
(
nodes
,
document
.
createDocumentFragment
(),
(
vm
?.
root
.
type
as
any
).
__scopeId
||
''
(
vm
?.
root
?.
type
as
any
).
__scopeId
||
''
,
hasItemClick
&&
triggerItemClick
)
rootRef
.
value
!
.
firstElementChild
!
.
innerHTML
=
''
rootRef
.
value
!
.
firstElementChild
!
.
appendChild
(
nodeList
)
...
...
packages/uni-components/src/components/rich-text/nodes-parser.js
浏览文件 @
ec8d177f
...
...
@@ -102,7 +102,12 @@ function normlizeValue(tagName, name, value) {
return
value
}
export
default
function
parseNodes
(
nodes
,
parentNode
,
scopeId
)
{
export
default
function
parseNodes
(
nodes
,
parentNode
,
scopeId
,
triggerItemClick
)
{
nodes
.
forEach
(
function
(
node
)
{
if
(
!
isPlainObject
(
node
))
{
return
...
...
@@ -140,9 +145,11 @@ export default function parseNodes(nodes, parentNode, scopeId) {
})
}
processClickEvent
(
node
,
elem
,
triggerItemClick
)
const
children
=
node
.
children
if
(
Array
.
isArray
(
children
)
&&
children
.
length
)
{
parseNodes
(
node
.
children
,
elem
)
parseNodes
(
node
.
children
,
elem
,
scopeId
,
triggerItemClick
)
}
parentNode
.
appendChild
(
elem
)
...
...
@@ -160,3 +167,17 @@ export default function parseNodes(nodes, parentNode, scopeId) {
})
return
parentNode
}
function
processClickEvent
(
node
,
elem
,
triggerItemClick
)
{
if
([
'
a
'
,
'
img
'
].
includes
(
node
.
name
)
&&
triggerItemClick
)
{
elem
.
setAttribute
(
'
onClick
'
,
'
return false;
'
)
elem
.
addEventListener
(
'
click
'
,
(
e
)
=>
{
triggerItemClick
(
e
,
{
node
})
e
.
stopPropagation
()
},
true
)
}
}
packages/uni-h5/dist/uni-h5.cjs.js
浏览文件 @
ec8d177f
...
...
@@ -5028,7 +5028,7 @@ function normlizeValue(tagName, name, value) {
return
getRealPath
(
value
);
return
value
;
}
function
parseNodes
(
nodes
,
parentNode
,
scopeId
)
{
function
parseNodes
(
nodes
,
parentNode
,
scopeId
,
triggerItemClick
)
{
nodes
.
forEach
(
function
(
node
)
{
if
(
!
shared
.
isPlainObject
(
node
))
{
return
;
...
...
@@ -5064,9 +5064,10 @@ function parseNodes(nodes, parentNode, scopeId) {
}
});
}
processClickEvent
(
node
,
elem
,
triggerItemClick
);
const
children
=
node
.
children
;
if
(
Array
.
isArray
(
children
)
&&
children
.
length
)
{
parseNodes
(
node
.
children
,
elem
);
parseNodes
(
node
.
children
,
elem
,
scopeId
,
triggerItemClick
);
}
parentNode
.
appendChild
(
elem
);
}
else
{
...
...
@@ -5077,6 +5078,15 @@ function parseNodes(nodes, parentNode, scopeId) {
});
return
parentNode
;
}
function
processClickEvent
(
node
,
elem
,
triggerItemClick
)
{
if
([
"
a
"
,
"
img
"
].
includes
(
node
.
name
)
&&
triggerItemClick
)
{
elem
.
setAttribute
(
"
onClick
"
,
"
return false;
"
);
elem
.
addEventListener
(
"
click
"
,
(
e2
)
=>
{
triggerItemClick
(
e2
,
{
node
});
e2
.
stopPropagation
();
},
true
);
}
}
const
props$f
=
{
nodes
:
{
type
:
[
Array
,
String
],
...
...
@@ -5091,14 +5101,24 @@ var index$p = /* @__PURE__ */ defineBuiltInComponent({
MODE
:
3
},
props
:
props$f
,
setup
(
props2
)
{
emits
:
[
"
click
"
,
"
touchstart
"
,
"
touchmove
"
,
"
touchcancel
"
,
"
touchend
"
,
"
longpress
"
],
setup
(
props2
,
{
emit
:
emit2
,
attrs
})
{
const
vm
=
vue
.
getCurrentInstance
();
const
rootRef
=
vue
.
ref
(
null
);
const
trigger
=
useCustomEvent
(
rootRef
,
emit2
);
const
hasItemClick
=
!!
attrs
.
onItemclick
;
function
triggerItemClick
(
e2
,
detail
=
{})
{
trigger
(
"
itemclick
"
,
e2
,
detail
);
}
function
_renderNodes
(
nodes
)
{
var
_a
;
if
(
typeof
nodes
===
"
string
"
)
{
nodes
=
parseHtml
(
nodes
);
}
const
nodeList
=
parseNodes
(
nodes
,
document
.
createDocumentFragment
(),
(
vm
==
null
?
void
0
:
vm
.
root
.
type
).
__scopeId
||
""
);
const
nodeList
=
parseNodes
(
nodes
,
document
.
createDocumentFragment
(),
(
(
_a
=
vm
==
null
?
void
0
:
vm
.
root
)
==
null
?
void
0
:
_a
.
type
).
__scopeId
||
""
,
hasItemClick
&&
triggerItemClick
);
rootRef
.
value
.
firstElementChild
.
innerHTML
=
""
;
rootRef
.
value
.
firstElementChild
.
appendChild
(
nodeList
);
}
...
...
packages/uni-h5/dist/uni-h5.es.js
浏览文件 @
ec8d177f
...
...
@@ -11494,7 +11494,7 @@ function normlizeValue(tagName, name, value) {
return getRealPath(value);
return value;
}
function parseNodes(nodes, parentNode, scopeId) {
function parseNodes(nodes, parentNode, scopeId
, triggerItemClick
) {
nodes.forEach(function(node) {
if (!isPlainObject(node)) {
return;
...
...
@@ -11530,9 +11530,10 @@ function parseNodes(nodes, parentNode, scopeId) {
}
});
}
processClickEvent(node, elem, triggerItemClick);
const children = node.children;
if (Array.isArray(children) && children.length) {
parseNodes(node.children, elem);
parseNodes(node.children, elem
, scopeId, triggerItemClick
);
}
parentNode.appendChild(elem);
} else {
...
...
@@ -11543,6 +11544,15 @@ function parseNodes(nodes, parentNode, scopeId) {
});
return parentNode;
}
function processClickEvent(node, elem, triggerItemClick) {
if (["a", "img"].includes(node.name) && triggerItemClick) {
elem.setAttribute("onClick", "return false;");
elem.addEventListener("click", (e2) => {
triggerItemClick(e2, { node });
e2.stopPropagation();
}, true);
}
}
const props$m = {
nodes: {
type: [Array, String],
...
...
@@ -11557,14 +11567,24 @@ var index$m = /* @__PURE__ */ defineBuiltInComponent({
MODE: 3
},
props: props$m,
setup(props2) {
emits: ["click", "touchstart", "touchmove", "touchcancel", "touchend", "longpress"],
setup(props2, {
emit: emit2,
attrs: attrs2
}) {
const vm = getCurrentInstance();
const rootRef = ref(null);
const trigger = useCustomEvent(rootRef, emit2);
const hasItemClick = !!attrs2.onItemclick;
function triggerItemClick(e2, detail = {}) {
trigger("itemclick", e2, detail);
}
function _renderNodes(nodes) {
var _a;
if (typeof nodes === "string") {
nodes = parseHtml(nodes);
}
const nodeList = parseNodes(nodes, document.createDocumentFragment(), (
vm == null ? void 0 : vm.root.type).__scopeId || ""
);
const nodeList = parseNodes(nodes, document.createDocumentFragment(), (
(_a = vm == null ? void 0 : vm.root) == null ? void 0 : _a.type).__scopeId || "", hasItemClick && triggerItemClick
);
rootRef.value.firstElementChild.innerHTML = "";
rootRef.value.firstElementChild.appendChild(nodeList);
}
...
...
packages/uni-stat/dist/uni-stat.cjs.js
浏览文件 @
ec8d177f
此差异已折叠。
点击以展开。
packages/uni-stat/dist/uni-stat.es.js
浏览文件 @
ec8d177f
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录