Skip to content

Commit 1b5e6c0

Browse files
Change buttons by layers (#70)
Co-authored-by: Tomás Grüner <[email protected]>
1 parent 2470e66 commit 1b5e6c0

File tree

7 files changed

+69
-56
lines changed

7 files changed

+69
-56
lines changed

src/context.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@ export class GlobalContext {
1616
private saveIntervalId: NodeJS.Timeout | null = null;
1717
private ipGenerator: IpAddressGenerator;
1818

19-
initialize(viewport: Viewport) {
19+
initialize(viewport: Viewport, layer: string) {
2020
this.viewport = viewport;
2121

2222
// Sets the initial datagraph and viewgraph
23-
loadFromLocalStorage(this);
23+
loadFromLocalStorage(this, layer);
2424

2525
this.setIpGenerator();
2626
}

src/graphics/left_bar.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,8 @@ export class LeftBar {
2222
img.classList.add("icon-img");
2323
button.appendChild(img);
2424
}
25+
26+
clear() {
27+
this.leftBar.textContent = "";
28+
}
2529
}

src/index.ejs

Lines changed: 22 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,29 @@
1-
<!DOCTYPE html>
1+
<!doctype html>
22
<html>
3+
<head>
4+
<title><%= htmlWebpackPlugin.options.title %></title>
5+
</head>
36

4-
<head>
5-
<title>
6-
<%= htmlWebpackPlugin.options.title %>
7-
</title>
8-
</head>
9-
10-
<body>
7+
<body>
118
<div id="top-bar">
12-
<button id="new-button" class="new-button" title="New">New</button>
13-
<button id="save-button" class="save-button" title="Save">Save</button>
14-
<button id="load-button" class="load-button" title="Load">Load</button>
15-
<div id="app-title">GEduNet</div>
9+
<button id="new-button" class="new-button" title="New">New</button>
10+
<button id="save-button" class="save-button" title="Save">Save</button>
11+
<button id="load-button" class="load-button" title="Load">Load</button>
12+
<div id="app-title">GEduNet</div>
1613
</div>
1714
<div id="bottom-screen" class="row container">
18-
<div id="left-bar" class="left-bar"></div>
19-
<div class="canvas-container">
20-
<canvas id="canvas"></canvas>
21-
<button id="pause-button" class="pause-button" title="Pause"></button>
22-
<select id="layer-select" class="dropdown-menu">
23-
<option value="application">App Layer</option>
24-
<option value="transport">Transport Layer</option>
25-
<option value="network">Network Layer</option>
26-
<option value="link">Link Layer</option>
27-
</select>
28-
</div>
29-
<div id="right-bar" class="right-bar"></div>
15+
<div id="left-bar" class="left-bar"></div>
16+
<div class="canvas-container">
17+
<canvas id="canvas"></canvas>
18+
<button id="pause-button" class="pause-button" title="Pause"></button>
19+
<select id="layer-select" class="dropdown-menu">
20+
<option value="application">App Layer</option>
21+
<option value="transport">Transport Layer</option>
22+
<option value="network">Network Layer</option>
23+
<option value="link">Link Layer</option>
24+
</select>
25+
</div>
26+
<div id="right-bar" class="right-bar"></div>
3027
</div>
31-
</body>
32-
28+
</body>
3329
</html>

src/index.ts

Lines changed: 37 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -46,29 +46,49 @@ import PauseSvg from "./assets/pause-icon.svg";
4646
const viewport = new Viewport(app.renderer.events);
4747
app.stage.addChild(viewport);
4848

49+
// Get the layer’s menu
50+
const layerSelect = document.getElementById(
51+
"layer-select",
52+
) as HTMLSelectElement;
53+
4954
// Left bar logic
5055
const leftBar = LeftBar.getFrom(document);
5156
RightBar.getInstance();
5257

53-
// Add router button
54-
leftBar.addButton(
55-
RouterSvg,
56-
() => AddDevice(ctx, DeviceType.Router),
57-
"Add Router",
58-
);
58+
const addRouterButton = () =>
59+
leftBar.addButton(
60+
RouterSvg,
61+
() => AddDevice(ctx, DeviceType.Router),
62+
"Add Router",
63+
);
64+
65+
const addHostButton = () =>
66+
leftBar.addButton(
67+
ComputerSvg,
68+
() => AddDevice(ctx, DeviceType.Host),
69+
"Add Host",
70+
);
71+
72+
function setButtonsByLayer(layer: string) {
73+
leftBar.clear();
74+
75+
const buttonConfig: Record<string, (() => void)[]> = {
76+
application: [addHostButton],
77+
transport: [addHostButton],
78+
network: [addRouterButton, addHostButton],
79+
link: [addRouterButton, addHostButton],
80+
};
81+
82+
buttonConfig[layer]?.forEach((addButton) => addButton());
83+
}
5984

60-
// Add Host button
61-
leftBar.addButton(
62-
ComputerSvg,
63-
() => AddDevice(ctx, DeviceType.Host),
64-
"Add Host",
65-
);
85+
setButtonsByLayer(layerSelect.value);
6686

67-
ctx.initialize(viewport);
87+
// Initialize Context
88+
ctx.initialize(viewport, layerSelect.value);
6889

6990
// Ticker logic
7091
// app.ticker.add(() => { });
71-
7292
const lBar = document.getElementById("left-bar");
7393
const rBar = document.getElementById("right-bar");
7494
const tBar = document.getElementById("top-bar");
@@ -126,16 +146,14 @@ import PauseSvg from "./assets/pause-icon.svg";
126146
pauseButton.onclick = triggerPause;
127147

128148
// (!) For layer abstraction functionality
129-
const layerSelect = document.getElementById(
130-
"layer-select",
131-
) as HTMLSelectElement;
132-
133149
const selectNewLayer = (event: Event) => {
134150
const selectedLayer = (event.target as HTMLSelectElement).value;
135151
console.log(`Layer selected: ${selectedLayer}`);
136152

137153
if (selectedLayer) {
138154
ctx.changeViewGraph(selectedLayer);
155+
// LeftBar is reset
156+
setButtonsByLayer(selectedLayer);
139157
}
140158
};
141159

@@ -149,7 +167,7 @@ import PauseSvg from "./assets/pause-icon.svg";
149167
};
150168

151169
// TODO: load from local storage directly, without first generating a context
152-
loadFromLocalStorage(ctx);
170+
loadFromLocalStorage(ctx, layerSelect.value);
153171

154172
console.log("initialized!");
155173
})();

src/types/devices/utils.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ export function layerFromName(name: string): Layer {
5353

5454
export function layerIncluded(layer1: Layer, layer2: Layer) {
5555
// Determines whether layer1 is included within layer2’s abstraction.
56-
console.log(`${layer1.valueOf()} <= ${layer2.valueOf()}`);
5756
return layer1.valueOf() <= layer2.valueOf();
5857
}
5958

src/types/graphs/viewgraph.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@ export class ViewGraph {
5757
}
5858
});
5959

60-
console.log("Finished creating devices in ViewGraph");
6160
connections.forEach((key) => {
6261
const connection = parseConnectionKey(key);
6362
const device1 = this.getDevice(connection.id1);
@@ -312,17 +311,14 @@ export class ViewGraph {
312311
connections: Set<string>,
313312
) {
314313
graph.get(v).connections.forEach((w) => {
315-
console.log(`Se accede a ${w} desde ${v}`);
316314
if (!visited.has(w)) {
317-
console.log(`Se visita ${w}`);
318315
const adyacent = this.datagraph.getDevice(w);
319316
// mark node as visited
320317
visited.add(w);
321318
if (layerIncluded(layerFromType(adyacent.type), this.layer)) {
322319
// add connection between v and w
323320
const connectionKey: string = generateConnectionKey(w, s);
324321
if (!connections.has(connectionKey)) {
325-
console.log(`Dispositivos agregados a conexion`);
326322
connections.add(connectionKey);
327323
}
328324
} else {

src/types/viewportManager.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { Edge } from "./edge";
55
import { RightBar } from "../graphics/right_bar";
66
import { Packet } from "./packet";
77
import { DeviceType } from "./devices/device";
8-
import { createDevice } from "./devices/utils";
8+
import { createDevice, layerFromName } from "./devices/utils";
99

1010
type Selectable = Device | Edge | Packet;
1111

@@ -141,15 +141,15 @@ export function saveToLocalStorage(ctx: GlobalContext) {
141141
console.log("Graph saved in local storage.");
142142
}
143143

144-
export function loadFromLocalStorage(ctx: GlobalContext) {
144+
export function loadFromLocalStorage(ctx: GlobalContext, currLayer: string) {
145145
const jsonData = localStorage.getItem(LOCAL_STORAGE_KEY) || "[]";
146146
try {
147147
const graphData: GraphData = JSON.parse(jsonData);
148-
ctx.load(DataGraph.fromData(graphData));
148+
ctx.load(DataGraph.fromData(graphData), layerFromName(currLayer));
149149
} catch (error) {
150150
const extraData = { jsonData, error };
151151
console.error("Failed to load graph from local storage.", extraData);
152-
ctx.load(new DataGraph());
152+
ctx.load(new DataGraph(), layerFromName(currLayer));
153153
return;
154154
}
155155
console.log("Graph loaded from local storage.");

0 commit comments

Comments
 (0)