@@ -18,16 +18,23 @@ function renderTerminal() {
18
18
const terminal = document . getElementById ( 'terminal' ) ;
19
19
let html = '' ;
20
20
if ( terminalState === 'menu' ) {
21
- html += '<span style="color:#888">Use ↑/↓ to select, Enter to run, → to view code.</span><br>' ;
22
- html += '<div class="mobile-menu-btns">' ;
21
+ html += '<span style="color:#888">Use ↑/↓ to select, Enter/double-tap to run, → to view code.</span><br>' ;
22
+ // Terminal printed menu with switch indicator
23
+ html += '<div id="terminal-menu-list" style="margin-top:18px;">' ;
23
24
javaFilesList . forEach ( ( file , idx ) => {
24
- html += `<button class="mobile-menu-btn${ idx === selectedFileIdx ?' active' :'' } " data-idx="${ idx } ">${ file . label } </button><br>` ;
25
+ html += `<div class="terminal-menu-item${ idx === selectedFileIdx ?' active' :'' } " data-idx="${ idx } " style="display:flex;align-items:center;gap:8px;cursor:pointer;">` ;
26
+ html += `<span style="display:inline-block;width:18px;text-align:center;">${ idx === selectedFileIdx ?'▶' :' ' } </span>` ;
27
+ html += `<span>${ file . label } </span>` ;
28
+ html += '</div>' ;
25
29
} ) ;
26
30
html += '</div>' ;
31
+ html += '<br><span style="color:#ffb86c">' + javaFilesList [ selectedFileIdx ] . brief + '</span>' ;
32
+ // Mobile menu buttons (below for accessibility)
33
+ html += '<div class="mobile-menu-btns" style="margin-top:18px;">' ;
27
34
javaFilesList . forEach ( ( file , idx ) => {
28
- html += ( idx === selectedFileIdx ? '<b style="color:#ff5555">▶ ' : ' ' ) + file . label + ( idx === selectedFileIdx ? '</b>' : '' ) + '<br>' ;
35
+ html += `<button class="mobile-menu-btn ${ idx === selectedFileIdx ? ' active' : '' } " data-idx=" ${ idx } "> ${ file . label } </button>\n` ;
29
36
} ) ;
30
- html += '<br><span style="color:#ffb86c">' + javaFilesList [ selectedFileIdx ] . brief + '</span >';
37
+ html += '</div >' ;
31
38
} else if ( terminalState === 'output' ) {
32
39
html += '<pre style="color:#ff5555;">' + lastOutputText + '</pre>' ;
33
40
html += '<br><span style="color:#888">[→] Check source code | [b] Back to menu</span>' ;
@@ -41,6 +48,19 @@ function renderTerminal() {
41
48
}
42
49
terminal . innerHTML = html ;
43
50
51
+ // Terminal menu item click (desktop & mobile)
52
+ document . querySelectorAll ( '.terminal-menu-item' ) . forEach ( item => {
53
+ item . onclick = function ( ) {
54
+ selectedFileIdx = parseInt ( item . getAttribute ( 'data-idx' ) ) ;
55
+ renderTerminal ( ) ;
56
+ } ;
57
+ item . ondblclick = function ( ) {
58
+ selectedFileIdx = parseInt ( item . getAttribute ( 'data-idx' ) ) ;
59
+ terminalState = 'running' ;
60
+ renderTerminal ( ) ;
61
+ window . runJavaFile ( javaFilesList [ selectedFileIdx ] . key , showOutput ) ;
62
+ } ;
63
+ } ) ;
44
64
// Mobile menu button logic
45
65
document . querySelectorAll ( '.mobile-menu-btn' ) . forEach ( btn => {
46
66
btn . onclick = function ( ) {
@@ -51,7 +71,7 @@ function renderTerminal() {
51
71
selectedFileIdx = parseInt ( btn . getAttribute ( 'data-idx' ) ) ;
52
72
terminalState = 'running' ;
53
73
renderTerminal ( ) ;
54
- runJavaFile ( javaFilesList [ selectedFileIdx ] . key , showOutput ) ;
74
+ window . runJavaFile ( javaFilesList [ selectedFileIdx ] . key , showOutput ) ;
55
75
} ;
56
76
} ) ;
57
77
// Mobile output/source navigation
@@ -85,7 +105,7 @@ function showSource() {
85
105
}
86
106
87
107
// Keyboard navigation
88
- function listenForKeys ( runJavaFile ) {
108
+ function listenForKeys ( ) {
89
109
document . addEventListener ( 'keydown' , function ( e ) {
90
110
if ( terminalState === 'menu' ) {
91
111
if ( e . key === 'ArrowUp' ) {
@@ -97,7 +117,7 @@ function listenForKeys(runJavaFile) {
97
117
} else if ( e . key === 'Enter' ) {
98
118
terminalState = 'running' ;
99
119
renderTerminal ( ) ;
100
- runJavaFile ( javaFilesList [ selectedFileIdx ] . key , showOutput ) ;
120
+ window . runJavaFile ( javaFilesList [ selectedFileIdx ] . key , showOutput ) ;
101
121
} else if ( e . key === 'ArrowRight' ) {
102
122
showSource ( ) ;
103
123
}
@@ -129,11 +149,11 @@ window.addEventListener('DOMContentLoaded', function() {
129
149
btn . onclick = showSource ;
130
150
document . body . appendChild ( btn ) ;
131
151
}
132
- } ) ;
133
152
134
- // Initial render
135
- showMenu ( ) ;
136
- listenForKeys ( runJavaFile ) ;
153
+ // Initial render and event setup after DOM is ready
154
+ showMenu ( ) ;
155
+ listenForKeys ( ) ;
156
+ } ) ;
137
157
138
158
// Expose for Java runner
139
159
window . showOutput = showOutput ;
0 commit comments