Skip to content

Commit c5a756b

Browse files
author
Timothy Johnson
committed
Fixes #15
1 parent c20cb3e commit c5a756b

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

src/nodes/ElementAttributes.svelte

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,9 @@
4646

4747
{#each listeners as { event, handler, modifiers }}
4848
 
49-
<span class="attr-name" data-tooltip={handler}>
49+
<span
50+
class="attr-name"
51+
data-tooltip={typeof handler == 'function' ? handler() : handler}>
5052
on:
5153
<SearchTerm text={event} />
5254
{#if modifiers && modifiers.length}|{modifiers.join('|')}{/if}

src/store.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,33 @@ function resolveFrame(frame) {
107107
}
108108
}
109109

110+
function resolveEventBubble(node) {
111+
if (node.detail.listeners) {
112+
for (const listener of node.detail.listeners) {
113+
if (!listener.handler.includes('bubble($$self, event)')) continue
114+
115+
listener.handler = () => {
116+
let target = node
117+
while ((target = target.parent)) if (target.type == 'component') break
118+
119+
const listeners = target.detail.listeners
120+
if (!listeners) return null
121+
122+
const parentListener = listeners.find(o => o.event == listener.event)
123+
if (!parentListener) return null
124+
125+
const handler = parentListener.handler
126+
if (!handler) return null
127+
128+
return (
129+
'// From parent\n' +
130+
(typeof handler == 'function' ? handler() : handler)
131+
)
132+
}
133+
}
134+
}
135+
}
136+
110137
port.onMessage.addListener(msg => {
111138
switch (msg.type) {
112139
case 'init': {
@@ -122,6 +149,7 @@ port.onMessage.addListener(msg => {
122149
node.children = []
123150
node.collapsed = true
124151
node.invalidate = noop
152+
resolveEventBubble(node)
125153

126154
const targetNode = nodeMap.get(msg.target)
127155
nodeMap.set(node.id, node)
@@ -157,6 +185,7 @@ port.onMessage.addListener(msg => {
157185
case 'updateNode': {
158186
const node = nodeMap.get(msg.node.id)
159187
Object.assign(node, msg.node)
188+
resolveEventBubble(node)
160189

161190
const selected = get(selectedNode)
162191
if (selected && selected.id == msg.node.id) selectedNode.update(o => o)

0 commit comments

Comments
 (0)