Skip to content

Commit 3c4e7ee

Browse files
committed
AEDebugging_ Connect CodeView to Timeline
SQUASHED: AUTO-COMMIT-src-client-reactive-components-basic-aexpr-timeline.js,AUTO-COMMIT-src-components-widgets-lively-code-mirror.js,
1 parent cc15e3c commit 3c4e7ee

File tree

2 files changed

+66
-8
lines changed

2 files changed

+66
-8
lines changed

src/client/reactive/components/basic/aexpr-timeline.js

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -121,9 +121,13 @@ export default class EventDrops extends Morph {
121121
//Register to overview selection changes
122122
jQuery(this.aeOverview).on("changed.jstree", (e, data) => {
123123
this.eventsChanged();
124-
}
124+
});
125+
this.ready = false;
126+
jQuery(this.aeOverview).one("ready.jstree", (e, data) => {
127+
this.ready = true;
128+
});
125129
//Register to grouping change
126-
);this.groupByLine.addEventListener('change', () => {
130+
this.groupByLine.addEventListener('change', () => {
127131
if (this.groupByLine.checked) {
128132
this.groupingFunction = this.locationGrouping();
129133
} else {
@@ -259,12 +263,12 @@ export default class EventDrops extends Morph {
259263
return { ae, events: ae.meta().get('events').filter(event => event.type === "changed value").filter(this.filterFunction) };
260264
});
261265
this.valuesOverTime.innerHTML = "";
262-
263-
for(const {ae, events} of aeWithRelevantEvents) {
264-
if(events.length === 0) continue;
265-
let row = <tr><th>{ae.meta().get('id')}</th></tr>
266+
267+
for (const { ae, events } of aeWithRelevantEvents) {
268+
if (events.length === 0) continue;
269+
let row = <tr><th>{ae.meta().get('id')}</th></tr>;
266270
row.append(<td>{events[0].value.lastValue}</td>);
267-
for(const event of events) {
271+
for (const event of events) {
268272
row.append(<td>{event.value.value}</td>);
269273
}
270274
this.valuesOverTime.append(row);
@@ -273,7 +277,7 @@ export default class EventDrops extends Morph {
273277

274278
updateOverview(aexprs) {
275279
jQuery(this.aeOverview).jstree(true).settings.core.data = this.generateOverviewJSON(aexprs);
276-
jQuery(this.aeOverview).jstree(true).refresh();
280+
jQuery(this.aeOverview).jstree(true).refresh(true);
277281
}
278282

279283
generateOverviewJSON(aexprs) {
@@ -330,6 +334,29 @@ export default class EventDrops extends Morph {
330334
this.detached = true;
331335
}
332336

337+
filterToAEs(aes) {
338+
const tree = jQuery(this.aeOverview).jstree(true);
339+
tree.deselect_all();
340+
if(this.ready) {
341+
for(const ae of aes) {
342+
tree.select_node(ae.timelineID + 1);
343+
}
344+
} else {
345+
this.filteredAEs = aes;
346+
jQuery(this.aeOverview).on("refresh.jstree", (e, data) => {
347+
if(this.filteredAEs) {
348+
for(const ae of this.filteredAEs) {
349+
tree.select_node(ae.timelineID + 1);
350+
}
351+
if(tree.get_node([...this.filteredAEs][0])) {
352+
this.filteredAEs = [];
353+
}
354+
}
355+
});
356+
tree.refresh();
357+
}
358+
}
359+
333360
get diagram() {
334361
return this.get("#diagram");
335362
}

src/components/widgets/lively-code-mirror.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1654,6 +1654,8 @@ export default class LivelyCodeMirror extends HTMLElement {
16541654
async drawAExprDependencyList(dependencies, markerBounds) {
16551655

16561656
const menuItems = [];
1657+
const allAEs = this.union(...dependencies.map(dep => dep.aes))
1658+
menuItems.push(["open timeline", () => {this.navigateToTimeline(allAEs)}, "", "l"]);
16571659

16581660
dependencies.forEach(dep => {
16591661
const source = dep.source;
@@ -1683,4 +1685,33 @@ export default class LivelyCodeMirror extends HTMLElement {
16831685
this.focus();
16841686
});
16851687
}
1688+
1689+
union(...iterables) {
1690+
const set = new Set();
1691+
1692+
for (const iterable of iterables) {
1693+
for (const item of iterable) {
1694+
set.add(item);
1695+
}
1696+
}
1697+
1698+
return set;
1699+
}
1700+
1701+
async navigateToTimeline(aes) {
1702+
const existingTimelines = document.body.querySelectorAll('aexpr-timeline');
1703+
1704+
if(existingTimelines.length > 0) {
1705+
const timeline = existingTimelines[0];
1706+
timeline.filterToAEs(aes);
1707+
timeline.parentElement.focus();
1708+
timeline.focus();
1709+
return;
1710+
}
1711+
1712+
lively.openComponentInWindow("aexpr-timeline").then((timeline) => {
1713+
timeline.filterToAEs(aes);
1714+
// TODO Filter
1715+
})
1716+
}
16861717
}

0 commit comments

Comments
 (0)