mcmeszi commited on
Commit
eceac39
·
verified ·
1 Parent(s): bbfbd92

Update public/index.html

Browse files
Files changed (1) hide show
  1. public/index.html +95 -161
public/index.html CHANGED
@@ -2,186 +2,125 @@
2
  <html lang="hu">
3
  <head>
4
  <meta charset="UTF-8" />
5
- <meta http-equiv="X-UA-Compatible" content="IE=edge" />
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
  <title>Theos ex Machina</title>
8
- <!-- Inter font – jól olvasható, tudományos hangulat -->
9
- <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700&display=swap" rel="stylesheet" />
10
  <style>
 
11
  :root {
12
- --c-bg: #fafafa;
13
- --c-bg-panel: #ffffff;
14
- --c-primary: #00684a;
15
- --c-primary-dark: #004f38;
16
- --c-border: #d0d7de;
17
- --c-heading: #1a1a1a;
18
- --c-text: #303030;
19
- }
20
-
21
- * { box-sizing: border-box; }
22
- body {
23
- margin: 0;
24
- font-family: "Inter", Arial, Helvetica, sans-serif;
25
- background: var(--c-bg);
26
- color: var(--c-text);
27
- line-height: 1.6;
28
- -webkit-font-smoothing: antialiased;
29
- }
30
-
31
- .wrapper {
32
- max-width: 800px;
33
- margin: 4rem auto;
34
- padding: 0 1rem;
35
- }
36
-
37
- h1 {
38
- font-size: 2.2rem;
39
- font-weight: 700;
40
- color: var(--c-heading);
41
- margin: 0 0 0.5rem;
42
- }
43
- h2 {
44
- font-size: 1.4rem;
45
- margin: 0.5rem 0 1rem;
46
- }
47
-
48
- .panel {
49
- background: var(--c-bg-panel);
50
- border: 1px solid var(--c-border);
51
- border-radius: 8px;
52
- padding: 1.5rem 1.25rem;
53
- box-shadow: 0 2px 6px rgba(0,0,0,0.04);
54
- }
55
-
56
- label {
57
- display: block;
58
- font-weight: 500;
59
- margin-bottom: 0.25rem;
60
- }
61
-
62
- select, button {
63
- width: 100%;
64
- font: inherit;
65
- font-size: 1rem;
66
- padding: 0.55rem 0.65rem;
67
- border-radius: 6px;
68
- border: 1px solid var(--c-border);
69
- transition: border-color 0.15s ease;
70
- background: #fff;
71
- }
72
- select:focus, button:focus {
73
- outline: none;
74
- border-color: var(--c-primary);
75
- }
76
-
77
- button {
78
- display: flex;
79
- align-items: center;
80
- justify-content: center;
81
- gap: 0.4rem;
82
- font-weight: 600;
83
- background: var(--c-primary);
84
- color: #fff;
85
- border: none;
86
- cursor: pointer;
87
- margin-top: 1rem;
88
- transition: background 0.2s ease;
89
- }
90
- button:hover:not(:disabled) {
91
- background: var(--c-primary-dark);
92
- }
93
- button:disabled {
94
- opacity: 0.6;
95
- cursor: not-allowed;
96
- }
97
-
98
- .grid {
99
- display: grid;
100
- grid-template-columns: 1fr 1fr;
101
- gap: 1rem;
102
- }
103
-
104
- #result {
105
- margin-top: 2.5rem;
106
- display: none;
107
- }
108
- pre {
109
- white-space: pre-wrap;
110
- background: #f2f4f6;
111
- padding: 1.25rem;
112
- border-radius: 8px;
113
- border: 1px solid var(--c-border);
114
- }
115
-
116
- @media (max-width: 600px) {
117
- .grid { grid-template-columns: 1fr; }
118
- }
119
  </style>
120
  </head>
121
  <body>
122
- <div class="wrapper">
123
  <header>
124
  <h1>Theos ex Machina</h1>
125
- <p class="panel" style="margin-bottom:1.5rem">Válassz könyvet, fejezetet és verset, vagy kattints a <strong>🎲 Random</strong> gombra!<br><small style="color:#555">Forrás: KJV → mesterséges intelligencia által fordított és értelmezett magyar szöveg</small></p>
126
  </header>
127
 
128
- <div class="panel">
129
- <label for="book">Könyv</label>
130
- <select id="book"></select>
131
-
132
- <div class="grid" style="margin-top:1rem">
133
- <div>
134
- <label for="chapter">Fejezet</label>
135
- <select id="chapter"></select>
136
- </div>
137
- <div>
138
- <label for="verse">Vers</label>
139
- <select id="verse"></select>
140
- </div>
141
- </div>
142
 
143
- <div class="grid" style="margin-top:1.25rem">
144
- <button id="randomBtn">🎲 Random vers</button>
145
- <button id="generateBtn">📖 Elemzés</button>
 
146
  </div>
 
 
 
 
 
 
 
 
 
147
  </div>
148
 
149
  <section id="result">
150
- <h2>Fordítás &amp; AI‑elemzés</h2>
151
  <pre id="analysis"></pre>
152
  </section>
153
- </div>
154
 
155
  <script>
156
  // ───────────────────────────────────────────────
157
  // Könyvlista (value = angol KJV név, label = magyar név)
158
- const books = [
159
- ["Genesis","1Mózes"],["Exodus","2Mózes"],["Leviticus","3Mózes"],["Numbers","4Mózes"],["Deuteronomy","5Mózes"],
160
- ["Joshua","Józsué"],["Judges","Bírák"],["Ruth","Ruth"],
161
- ["1 Samuel","1Sámuel"],["2 Samuel","2Sámuel"],["1 Kings","1Királyok"],["2 Kings","2Királyok"],
162
- ["1 Chronicles","1Krónika"],["2 Chronicles","2Krónika"],["Ezra","Ezsdás"],["Nehemiah","Nehémiás"],
163
- ["Esther","Eszter"],["Job","Jób"],["Psalms","Zsoltárok"],["Proverbs","Példabeszédek"],
164
- ["Ecclesiastes","Prédikátor"],["Song of Solomon","Énekek éneke"],["Isaiah","Ézsaiás"],
165
- ["Jeremiah","Jeremiás"],["Lamentations","JerSir"],["Ezekiel","Ezékiel"],["Daniel","Dániel"],
166
- ["Hosea","Hóseás"],["Joel","Jóel"],["Amos","Ámós"],["Obadiah","Abdiás"],
167
- ["Jonah","Jónás"],["Micah","Mikeás"],["Nahum","Náhum"],["Habakkuk","Habakuk"],
168
- ["Zephaniah","Szofóniás"],["Haggai","Aggeus"],["Zechariah","Zakariás"],["Malachi","Malakiás"],
169
- ["Matthew","Máté"],["Mark","Márk"],["Luke","Lukács"],["John","János"],
170
- ["Acts","Apostolok"],["Romans","Róma"],["1 Corinthians","1Korintus"],["2 Corinthians","2Korintus"],
171
- ["Galatians","Galata"],["Ephesians","Efezus"],["Philippians","Filippi"],["Colossians","Kolossé"],
172
- ["1 Thessalonians","1Thessz"],["2 Thessalonians","2Thessz"],["1 Timothy","1Timóteus"],["2 Timothy","2Timóteus"],
173
- ["Titus","Titus"],["Philemon","Filemon"],["Hebrews","Zsidók"],["James","Jakab"],
174
- ["1 Peter","1Péter"],["2 Peter","2Péter"],["1 John","1János"],["2 John","2János"],
175
- ["3 John","3János"],["Jude","Júdás"],["Revelation","Jelenések"]
176
- ];
177
-
178
- // DOM elemek
179
- const bookSel=document.getElementById("book"),chapterSel=document.getElementById("chapter"),verseSel=document.getElementById("verse"),generateBtn=document.getElementById("generateBtn"),randomBtn=document.getElementById("randomBtn"),analysisEl=document.getElementById("analysis"),resultBox=document.getElementById("result");
180
 
181
- books.forEach(([val,label])=>{bookSel.insertAdjacentHTML("beforeend",`<option value="${val}">${label}</option>`)});
 
182
 
183
  async function fetchChapterVerseCounts(book){const r=await fetch("/api/meta?book="+encodeURIComponent(book));if(!r.ok)throw new Error("Szerver meta hiba");return (await r.json()).chapters;}
184
- function fill(sel,n){sel.innerHTML="";for(let i=1;i<=n;i++){sel.insertAdjacentHTML("beforeend",`<option value="${i}">${i}</option>`);} }
185
 
186
  async function refresh(){generateBtn.disabled=randomBtn.disabled=true;try{window.chapterMap=await fetchChapterVerseCounts(bookSel.value);fill(chapterSel,window.chapterMap.length);fill(verseSel,window.chapterMap[0]);}catch(e){alert(e.message);}finally{generateBtn.disabled=randomBtn.disabled=false;}}
187
  bookSel.addEventListener("change",refresh);
@@ -190,9 +129,4 @@ refresh();
190
 
191
  randomBtn.addEventListener("click",()=>{const chIdx=Math.floor(Math.random()*window.chapterMap.length);chapterSel.value=chIdx+1;fill(verseSel,window.chapterMap[chIdx]);verseSel.value=Math.floor(Math.random()*window.chapterMap[chIdx])+1;});
192
 
193
- async function generate(){const payload={book:bookSel.value,chapter:chapterSel.value,verse:verseSel.value};generateBtn.disabled=true;generateBtn.textContent="⏳ Kérem…";try{const r=await fetch("/api/analyze",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(payload)});if(!r.ok)throw new Error((await r.json()).error);const d=await r.json();analysisEl.textContent=d.output;resultBox.style.display="block";}catch(e){alert(e.message);}finally{generateBtn.disabled=false;generateBtn.textContent="📖 Elemzés";}}
194
-
195
- generateBtn.addEventListener("click",generate);
196
- </script>
197
- </body>
198
- </html>
 
2
  <html lang="hu">
3
  <head>
4
  <meta charset="UTF-8" />
 
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
  <title>Theos ex Machina</title>
7
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&display=swap" rel="stylesheet" />
 
8
  <style>
9
+ /* ─────────── Színpaletta: fekete–fehér minimal ─────────── */
10
  :root {
11
+ --bg-start: #000000;
12
+ --bg-end: #111111;
13
+ --surface: #1a1a1a;
14
+ --border: #333;
15
+ --text: #eaeaea;
16
+ --heading: #ffffff;
17
+ --btn-bg: #000000;
18
+ --btn-hover:#222222;
19
+ }
20
+
21
+ *{box-sizing:border-box;margin:0;padding:0}
22
+ body{
23
+ font-family:"Inter",Arial,Helvetica,sans-serif;
24
+ min-height:100vh;
25
+ background:linear-gradient(135deg,var(--bg-start),var(--bg-end));
26
+ color:var(--text);
27
+ line-height:1.6;
28
+ display:flex;
29
+ align-items:flex-start;
30
+ justify-content:center;
31
+ padding:3rem 1rem;
32
+ -webkit-font-smoothing:antialiased;
33
+ }
34
+
35
+ h1{font-size:2.3rem;font-weight:700;color:var(--heading);margin-bottom:0.6rem}
36
+ h2{font-size:1.4rem;color:var(--heading);margin:0.4rem 0 1rem}
37
+
38
+ .card{
39
+ width:100%;max-width:860px;
40
+ background:var(--surface);
41
+ border:1px solid var(--border);
42
+ border-radius:12px;
43
+ padding:2rem 1.75rem;
44
+ box-shadow:0 4px 18px rgba(0,0,0,0.45);
45
+ }
46
+
47
+ label{display:block;font-weight:600;margin-bottom:0.3rem;color:var(--text)}
48
+
49
+ select,button{
50
+ width:100%;font:inherit;font-size:1rem;
51
+ padding:0.65rem 0.75rem;border-radius:8px;border:1px solid var(--border);
52
+ background:#000;color:#fff;
53
+ transition:background 0.2s ease,border-color 0.2s ease;
54
+ }
55
+ select{background:var(--surface);color:var(--text)}
56
+ select:focus{outline:none;border-color:#555}
57
+
58
+ button{
59
+ font-weight:600;cursor:pointer;margin-top:1rem;background:var(--btn-bg);
60
+ }
61
+ button:hover:not(:disabled){background:var(--btn-hover)}
62
+ button:disabled{opacity:0.55;cursor:not-allowed}
63
+
64
+ .grid{display:grid;gap:1.1rem}
65
+ .two{grid-template-columns:1fr 1fr}
66
+ .btns{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));margin-top:1.7rem}
67
+
68
+ #result{margin-top:2rem;display:none}
69
+ pre{
70
+ white-space:pre-wrap;
71
+ background:#000;
72
+ color:#fff;
73
+ padding:1.4rem;
74
+ border-radius:8px;
75
+ border:1px solid var(--border);
76
+ font-weight:700; /* félkövér kimenet */
77
+ }
78
+
79
+ @media(max-width:640px){.two{grid-template-columns:1fr}}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
80
  </style>
81
  </head>
82
  <body>
83
+ <main class="card">
84
  <header>
85
  <h1>Theos ex Machina</h1>
86
+ <p style="opacity:0.83;margin-bottom:1.6rem">Válassz könyvet, fejezetet és verset, vagy kattints a <strong>🎲 Random</strong> gombra!<br><small style="opacity:0.7">Forrás: KJV → AI által fordított &amp; értelmezett magyar szöveg</small></p>
87
  </header>
88
 
89
+ <label for="book">Könyv</label>
90
+ <select id="book"></select>
 
 
 
 
 
 
 
 
 
 
 
 
91
 
92
+ <div class="grid two" style="margin-top:1.3rem">
93
+ <div>
94
+ <label for="chapter">Fejezet</label>
95
+ <select id="chapter"></select>
96
  </div>
97
+ <div>
98
+ <label for="verse">Vers</label>
99
+ <select id="verse"></select>
100
+ </div>
101
+ </div>
102
+
103
+ <div class="grid btns">
104
+ <button id="randomBtn">🎲 Random vers</button>
105
+ <button id="generateBtn">📖 Elemzés</button>
106
  </div>
107
 
108
  <section id="result">
109
+ <h2>Eredmény</h2>
110
  <pre id="analysis"></pre>
111
  </section>
112
+ </main>
113
 
114
  <script>
115
  // ───────────────────────────────────────────────
116
  // Könyvlista (value = angol KJV név, label = magyar név)
117
+ const books=[["Genesis","1Mózes"],["Exodus","2Mózes"],["Leviticus","3Mózes"],["Numbers","4Mózes"],["Deuteronomy","5Mózes"],["Joshua","Józsué"],["Judges","Bírák"],["Ruth","Ruth"],["1 Samuel","1Sámuel"],["2 Samuel","2Sámuel"],["1 Kings","1Királyok"],["2 Kings","2Királyok"],["1 Chronicles","1Krónika"],["2 Chronicles","2Krónika"],["Ezra","Ezsdás"],["Nehemiah","Nehémiás"],["Esther","Eszter"],["Job","Jób"],["Psalms","Zsoltárok"],["Proverbs","Példabeszédek"],["Ecclesiastes","Prédikátor"],["Song of Solomon","Énekek éneke"],["Isaiah","Ézsaiás"],["Jeremiah","Jeremiás"],["Lamentations","JerSir"],["Ezekiel","Ezékiel"],["Daniel","Dániel"],["Hosea","Hóseás"],["Joel","Jóel"],["Amos","Ámós"],["Obadiah","Abdiás"],["Jonah","Jónás"],["Micah","Mikeás"],["Nahum","Náhum"],["Habakkuk","Habakuk"],["Zephaniah","Szofóniás"],["Haggai","Aggeus"],["Zechariah","Zakariás"],["Malachi","Malakiás"],["Matthew","Máté"],["Mark","Márk"],["Luke","Lukács"],["John","János"],["Acts","Apostolok"],["Romans","Róma"],["1 Corinthians","1Korintus"],["2 Corinthians","2Korintus"],["Galatians","Galata"],["Ephesians","Efezus"],["Philippians","Filippi"],["Colossians","Kolossé"],["1 Thessalonians","1Thessz"],["2 Thessalonians","2Thessz"],["1 Timothy","1Timóteus"],["2 Timothy","2Timóteus"],["Titus","Titus"],["Philemon","Filemon"],["Hebrews","Zsidók"],["James","Jakab"],["1 Peter","1Péter"],["2 Peter","2Péter"],["1 John","1János"],["2 John","2János"],["3 John","3János"],["Jude","Júdás"],["Revelation","Jelenések"]];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
118
 
119
+ const bookSel=document.getElementById("book"),chapterSel=document.getElementById("chapter"),verseSel=document.getElementById("verse"),generateBtn=document.getElementById("generateBtn"),randomBtn=document.getElementById("randomBtn"),analysisEl=document.getElementById("analysis"),resultBox=document.getElementById("result");
120
+ books.forEach(([v,l])=>bookSel.insertAdjacentHTML("beforeend",`<option value="${v}">${l}</option>`));
121
 
122
  async function fetchChapterVerseCounts(book){const r=await fetch("/api/meta?book="+encodeURIComponent(book));if(!r.ok)throw new Error("Szerver meta hiba");return (await r.json()).chapters;}
123
+ function fill(sel,n){sel.innerHTML="";for(let i=1;i<=n;i++){sel.insertAdjacentHTML("beforeend",`<option value="${i}">${i}</option>`);}}
124
 
125
  async function refresh(){generateBtn.disabled=randomBtn.disabled=true;try{window.chapterMap=await fetchChapterVerseCounts(bookSel.value);fill(chapterSel,window.chapterMap.length);fill(verseSel,window.chapterMap[0]);}catch(e){alert(e.message);}finally{generateBtn.disabled=randomBtn.disabled=false;}}
126
  bookSel.addEventListener("change",refresh);
 
129
 
130
  randomBtn.addEventListener("click",()=>{const chIdx=Math.floor(Math.random()*window.chapterMap.length);chapterSel.value=chIdx+1;fill(verseSel,window.chapterMap[chIdx]);verseSel.value=Math.floor(Math.random()*window.chapterMap[chIdx])+1;});
131
 
132
+ async function generate(){const payload={book:bookSel.value,chapter:chapterSel.value,verse:verseSel.value};generateBtn.disabled=true;generateBtn.textContent="⏳ Kérem…";try{const r