Skip to content

Commit e3bac11

Browse files
building
1 parent 42c52f2 commit e3bac11

424 files changed

Lines changed: 43336 additions & 6 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

build/app.js

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
/**
2+
* Main Application Logic
3+
*/
4+
5+
document.addEventListener('DOMContentLoaded', () => {
6+
const expressionInput = document.getElementById('expressionInput');
7+
const copyLatexBtn = document.getElementById('copyLatexBtn');
8+
const copyCSVBtn = document.getElementById('copyCSVBtn');
9+
const errorMessage = document.getElementById('errorMessage');
10+
const truthTableContainer = document.getElementById('truthTableContainer');
11+
const gatesSvg = document.getElementById('gatesSvg');
12+
const cmosSvg = document.getElementById('cmosSvg');
13+
14+
const tabBlockDiagram = document.getElementById('tabBlockDiagram');
15+
const tabCMOS = document.getElementById('tabCMOS');
16+
const tabTruthTable = document.getElementById('tabTruthTable');
17+
18+
const blockDiagramTab = document.getElementById('blockDiagramTab');
19+
const cmosTab = document.getElementById('cmosTab');
20+
const truthTableTab = document.getElementById('truthTableTab');
21+
22+
// Format help modal elements
23+
const formatHelpBtn = document.getElementById('formatHelpBtn');
24+
const formatHelpModal = document.getElementById('formatHelpModal');
25+
const modalClose = document.querySelector('.modal-close');
26+
27+
let currentVisualizer = null;
28+
let currentLatex = '';
29+
30+
// Format help modal handlers
31+
formatHelpBtn.addEventListener('click', () => {
32+
formatHelpModal.style.display = 'block';
33+
});
34+
35+
modalClose.addEventListener('click', () => {
36+
formatHelpModal.style.display = 'none';
37+
});
38+
39+
window.addEventListener('click', (e) => {
40+
if (e.target === formatHelpModal) {
41+
formatHelpModal.style.display = 'none';
42+
}
43+
});
44+
45+
// Visualize on Enter key
46+
expressionInput.addEventListener('keypress', (e) => {
47+
if (e.key === 'Enter') {
48+
visualize();
49+
}
50+
});
51+
52+
function visualize() {
53+
const expression = expressionInput.value.trim();
54+
if (!expression) {
55+
showError('Enter expression');
56+
return;
57+
}
58+
59+
try {
60+
clearError();
61+
const boolExpr = new BooleanExpression(expression);
62+
currentVisualizer = new Visualizer(boolExpr);
63+
currentLatex = boolExpr.toLatex();
64+
65+
gatesSvg.setAttribute('viewBox', '0 0 1200 600');
66+
currentVisualizer.renderGateDiagram(gatesSvg);
67+
68+
cmosSvg.setAttribute('viewBox', '0 0 900 450');
69+
currentVisualizer.renderCMOSDiagram(cmosSvg);
70+
71+
currentVisualizer.renderTruthTable(truthTableContainer);
72+
} catch (error) {
73+
showError(error.message);
74+
}
75+
}
76+
77+
copyLatexBtn.addEventListener('click', () => {
78+
if (currentLatex) {
79+
navigator.clipboard.writeText(currentLatex);
80+
}
81+
});
82+
83+
copyCSVBtn.addEventListener('click', () => {
84+
if (!currentVisualizer) return;
85+
const vars = currentVisualizer.variables;
86+
const table = currentVisualizer.truthTable;
87+
let csv = vars.map(v => v.toUpperCase()).join(',') + ',Output\n';
88+
table.forEach(row => {
89+
csv += vars.map(v => row[v]).join(',') + ',' + row.output + '\n';
90+
});
91+
navigator.clipboard.writeText(csv);
92+
});
93+
94+
// Tab switching
95+
const tabs = { block: tabBlockDiagram, cmos: tabCMOS, truth: tabTruthTable };
96+
const contents = { block: blockDiagramTab, cmos: cmosTab, truth: truthTableTab };
97+
98+
Object.keys(tabs).forEach(key => {
99+
tabs[key].addEventListener('click', () => {
100+
Object.values(tabs).forEach(t => t.classList.remove('active'));
101+
Object.values(contents).forEach(c => c.style.display = 'none');
102+
tabs[key].classList.add('active');
103+
contents[key].style.display = 'block';
104+
});
105+
});
106+
107+
function showError(msg) {
108+
errorMessage.textContent = msg;
109+
errorMessage.style.display = 'block';
110+
}
111+
112+
function clearError() {
113+
errorMessage.style.display = 'none';
114+
}
115+
116+
console.log('Boolean Algebra Visualizer loaded');
117+
});

build/assets/.DS_Store

6 KB
Binary file not shown.

build/assets/and.png

6.05 KB
Loading

build/assets/nand.png

6.19 KB
Loading

build/assets/nmos.png

5.31 KB
Loading

build/assets/nor.png

7.26 KB
Loading

build/assets/not.png

9.7 KB
Loading

build/assets/or.png

7.02 KB
Loading

build/assets/pmos.png

7.04 KB
Loading

build/assets/xnor.png

8.23 KB
Loading

0 commit comments

Comments
 (0)