From 001b43c3af43eca5fa58c5841a9dcf4ea170803e Mon Sep 17 00:00:00 2001 From: Mike A Date: Sat, 23 Sep 2023 13:53:34 +0200 Subject: [PATCH 1/3] Add navigation history to subcircuit click event --- src/index.mjs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/index.mjs b/src/index.mjs index a4015fa..d9944b6 100644 --- a/src/index.mjs +++ b/src/index.mjs @@ -146,7 +146,7 @@ export class Circuit extends HeadlessCircuit { }); } displayOn(elem) { - return this._makePaper(elem, this._graph); + return this._makePaper(elem, this._graph, []); } scaleAndRefreshPaper(paper, scale) { paper.scale(Math.pow(1.1, scale)); @@ -156,7 +156,9 @@ export class Circuit extends HeadlessCircuit { graph.resetCells(graph.getCells()); paper.unfreeze(); } - _makePaper(elem, graph) { + _makePaper(elem, graph, navHistory) { + navHistory = navHistory || []; + this._engine.observeGraph(graph); const opts = _.merge({ el: elem, model: graph }, paperOptions); const paper = new joint.dia.Paper(opts); @@ -205,6 +207,8 @@ export class Circuit extends HeadlessCircuit { // subcircuit display const circuit = this; this.listenTo(paper, 'open:subcircuit', (model) => { + const newNavHistory = navHistory.concat(model); + const subcircuitModal = $('
', { title: model.get('celltype') + ' ' + model.get('label') }).appendTo('html > body'); @@ -212,7 +216,7 @@ export class Circuit extends HeadlessCircuit { // Create and set up paper const pdiv = $('
').appendTo(subcircuitModal); const graph = model.get('graph'); - const paper = this._makePaper(pdiv, graph); + const paper = this._makePaper(pdiv, graph, newNavHistory); paper.once('render:done', () => { this._windowCallback('Subcircuit', subcircuitModal, () => { this._engine.unobserveGraph(graph); @@ -227,7 +231,7 @@ export class Circuit extends HeadlessCircuit { for (const button of this._subcircuitButtons) { $('') .append($('').text(button.buttonText)) - .on('click', {circuit, model, paper}, (event) => button.callback(event.data)) + .on('click', {circuit, model, paper, navHistory: newNavHistory}, (event) => button.callback(event.data)) .appendTo(buttonGroup); } buttonGroup.prependTo(subcircuitModal); From 4ca2d8e96336cef44caf36d425f27c2cef797645 Mon Sep 17 00:00:00 2001 From: Mike A Date: Sat, 14 Oct 2023 14:38:21 +0200 Subject: [PATCH 2/3] Revert "Add navigation history to subcircuit click event" This reverts commit 001b43c3af43eca5fa58c5841a9dcf4ea170803e. --- src/index.mjs | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/index.mjs b/src/index.mjs index d9944b6..a4015fa 100644 --- a/src/index.mjs +++ b/src/index.mjs @@ -146,7 +146,7 @@ export class Circuit extends HeadlessCircuit { }); } displayOn(elem) { - return this._makePaper(elem, this._graph, []); + return this._makePaper(elem, this._graph); } scaleAndRefreshPaper(paper, scale) { paper.scale(Math.pow(1.1, scale)); @@ -156,9 +156,7 @@ export class Circuit extends HeadlessCircuit { graph.resetCells(graph.getCells()); paper.unfreeze(); } - _makePaper(elem, graph, navHistory) { - navHistory = navHistory || []; - + _makePaper(elem, graph) { this._engine.observeGraph(graph); const opts = _.merge({ el: elem, model: graph }, paperOptions); const paper = new joint.dia.Paper(opts); @@ -207,8 +205,6 @@ export class Circuit extends HeadlessCircuit { // subcircuit display const circuit = this; this.listenTo(paper, 'open:subcircuit', (model) => { - const newNavHistory = navHistory.concat(model); - const subcircuitModal = $('
', { title: model.get('celltype') + ' ' + model.get('label') }).appendTo('html > body'); @@ -216,7 +212,7 @@ export class Circuit extends HeadlessCircuit { // Create and set up paper const pdiv = $('
').appendTo(subcircuitModal); const graph = model.get('graph'); - const paper = this._makePaper(pdiv, graph, newNavHistory); + const paper = this._makePaper(pdiv, graph); paper.once('render:done', () => { this._windowCallback('Subcircuit', subcircuitModal, () => { this._engine.unobserveGraph(graph); @@ -231,7 +227,7 @@ export class Circuit extends HeadlessCircuit { for (const button of this._subcircuitButtons) { $('') .append($('').text(button.buttonText)) - .on('click', {circuit, model, paper, navHistory: newNavHistory}, (event) => button.callback(event.data)) + .on('click', {circuit, model, paper}, (event) => button.callback(event.data)) .appendTo(buttonGroup); } buttonGroup.prependTo(subcircuitModal); From 09df96c8c5b30f79da83d2addc93faaa76293c6a Mon Sep 17 00:00:00 2001 From: Mike A Date: Sat, 14 Oct 2023 15:18:18 +0200 Subject: [PATCH 3/3] Add a parent attribute to models --- src/index.mjs | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/index.mjs b/src/index.mjs index a4015fa..69cab6f 100644 --- a/src/index.mjs +++ b/src/index.mjs @@ -146,7 +146,7 @@ export class Circuit extends HeadlessCircuit { }); } displayOn(elem) { - return this._makePaper(elem, this._graph); + return this._makePaper(elem, this._graph, null); } scaleAndRefreshPaper(paper, scale) { paper.scale(Math.pow(1.1, scale)); @@ -156,7 +156,13 @@ export class Circuit extends HeadlessCircuit { graph.resetCells(graph.getCells()); paper.unfreeze(); } - _makePaper(elem, graph) { + _makePaper(elem, graph, parentModel) { + if (!parentModel) { + parentModel = graph; + parentModel.set("parent", null); + parentModel.set("isTopLevel", true); + } + this._engine.observeGraph(graph); const opts = _.merge({ el: elem, model: graph }, paperOptions); const paper = new joint.dia.Paper(opts); @@ -212,7 +218,7 @@ export class Circuit extends HeadlessCircuit { // Create and set up paper const pdiv = $('
').appendTo(subcircuitModal); const graph = model.get('graph'); - const paper = this._makePaper(pdiv, graph); + const paper = this._makePaper(pdiv, graph, model); paper.once('render:done', () => { this._windowCallback('Subcircuit', subcircuitModal, () => { this._engine.unobserveGraph(graph); @@ -221,8 +227,11 @@ export class Circuit extends HeadlessCircuit { }); }); - // Create buttons model.set("zoomLevel", 0); + model.set("parent", parentModel); + model.set("isTopLevel", false); + + // Create buttons const buttonGroup = $('
') for (const button of this._subcircuitButtons) { $('')