Nuzwa commited on
Commit
ad792a4
·
verified ·
1 Parent(s): 8de574d

Update index.html

Browse files
Files changed (1) hide show
  1. index.html +429 -46
index.html CHANGED
@@ -1,48 +1,431 @@
1
  <!DOCTYPE html>
2
- <div id="question-type-options" class="edu-assess-pro-container">
3
- <button class="edu-assess-pro-button" data-type="questionType" data-value="MCQs">MCQs</button>
4
- <button class="edu-assess-pro-button" data-type="questionType" data-value="Short Questions">Short Questions</button>
5
- <button class="edu-assess-pro-button" data-type="questionType" data-value="Long Questions">Long Questions</button>
6
- <button class="edu-assess-pro-button" data-type="questionType" data-value="Practical / Diagram-based Questions">Practical/Diagram</button>
7
- <button class="edu-assess-pro-button" data-type="questionType" data-value="Moral / Ethical Questions">Moral/Ethical</button>
8
- <button class="edu-assess-pro-button" data-type="questionType" data-value="Islamic Questions">Islamic</button>
9
- </div>
10
- </div>
11
-
12
- <div class="options-group">
13
- <h4>6. Advanced Options</h4>
14
- <div id="advanced-options" class="edu-assess-pro-container">
15
- <div>
16
- <button class="edu-assess-pro-toggle-btn" data-type="bloom" data-value="no">Bloom's Levels: No</button>
17
- </div>
18
- <div>
19
- <button class="edu-assess-pro-button" data-type="difficulty" data-value="Easy">Easy</button>
20
- <button class="edu-assess-pro-button" data-type="difficulty" data-value="Moderate">Moderate</button>
21
- <button class="edu-assess-pro-button" data-type="difficulty" data-value="Hard">Hard</button>
22
- </div>
23
- <div>
24
- <button class="edu-assess-pro-button" data-type="language" data-value="English">English</button>
25
- <button class="edu-assess-pro-button" data-type="language" data-value="Urdu">Urdu</button>
26
- <button class="edu-assess-pro-button" data-type="language" data-value="Bilingual">Bilingual</button>
27
- </div>
28
- </div>
29
- </div>
30
-
31
- <button id="generatePromptBtn">Generate Prompt</button>
32
-
33
- <div id="result-container" style="display:none; text-align: center; margin-top: 20px;">
34
- <p id="ready-text">Your prompt is ready! Now paste it</p>
35
- <textarea id="promptOutput" readonly></textarea>
36
- <div style="margin-top:12px;">
37
- <button id="openGptBtn" class="edu-assess-pro-button" style="background:#8e44ad;">Open EduAssess Pro GPT</button>
38
- </div>
39
- </div>
40
- </div>
41
-
42
- <script>
43
- // Configure your Custom GPT link here (same value is also in assets/app.js).
44
- window.CUSTOM_GPT_URL = 'https://chatgpt.com/g/g-68697e4c49508191b175d86830b34d85-eduassess-pro-smart-exam-paper-designer';
45
- </script>
46
- <script src="assets/app.js"></script>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
  </body>
48
- </html>
 
1
  <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <title>EduAssess Pro Smart Exam Paper Designer</title>
6
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
7
+
8
+ <!-- ====== Inline Styles (Colorful App UI) ====== -->
9
+ <style>
10
+ :root{
11
+ --bg: #0f172a; /* slate-900 */
12
+ --panel: #0b1224; /* deeper panel */
13
+ --muted:#94a3b8; /* slate-400 */
14
+ --accent:#22d3ee; /* cyan-400 */
15
+ --ring:#7c3aed; /* violet-600 */
16
+ --ok:#10b981; /* green-500 */
17
+ --warn:#f59e0b; /* amber-500 */
18
+ --danger:#ef4444; /* red-500 */
19
+ --white:#ffffff;
20
+ --shadow: 0 10px 30px rgba(0,0,0,.35);
21
+ --radius: 16px;
22
+ }
23
+ *{box-sizing:border-box}
24
+ html,body{height:100%}
25
+ body{
26
+ margin:0;
27
+ background:
28
+ radial-gradient(1200px 600px at 10% -10%, rgba(124,58,237,.35), transparent 60%),
29
+ radial-gradient(1000px 700px at 110% 10%, rgba(34,211,238,.25), transparent 60%),
30
+ linear-gradient(180deg, #0b1022 0%, #0f172a 100%);
31
+ font-family: ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial;
32
+ color:var(--white);
33
+ }
34
+
35
+ .wrap{
36
+ max-width:1100px;
37
+ margin:40px auto;
38
+ padding:24px;
39
+ }
40
+
41
+ .app{
42
+ background: linear-gradient(180deg, rgba(255,255,255,.02), rgba(255,255,255,.01));
43
+ border:1px solid rgba(148,163,184,.15);
44
+ border-radius: var(--radius);
45
+ box-shadow: var(--shadow);
46
+ backdrop-filter: blur(6px);
47
+ overflow:hidden;
48
+ }
49
+
50
+ .app__header{
51
+ display:flex; align-items:center; justify-content:space-between;
52
+ padding:24px;
53
+ border-bottom:1px solid rgba(148,163,184,.15);
54
+ background:
55
+ radial-gradient(600px 200px at 0% 0%, rgba(124,58,237,.25), transparent 60%),
56
+ radial-gradient(600px 200px at 100% 0%, rgba(34,211,238,.2), transparent 60%);
57
+ }
58
+ .title{
59
+ margin:0;
60
+ font-weight:800;
61
+ letter-spacing:.3px;
62
+ line-height:1.1;
63
+ font-size: clamp(20px, 3vw, 28px);
64
+ }
65
+ .subtitle{
66
+ margin:6px 0 0 0;
67
+ color:var(--muted);
68
+ font-size:14px;
69
+ }
70
+
71
+ .badge{
72
+ border:1px dashed rgba(148,163,184,.35);
73
+ padding:8px 12px;
74
+ border-radius:12px;
75
+ color:var(--muted);
76
+ font-size:12px;
77
+ }
78
+
79
+ .grid{
80
+ display:grid;
81
+ gap:18px;
82
+ grid-template-columns: repeat(12, 1fr);
83
+ padding:24px;
84
+ }
85
+ @media (max-width: 980px){
86
+ .grid{grid-template-columns: repeat(6, 1fr);}
87
+ }
88
+ @media (max-width: 640px){
89
+ .grid{grid-template-columns: repeat(4, 1fr);}
90
+ }
91
+
92
+ .card{
93
+ grid-column: span 12;
94
+ background: rgba(2,6,23,.35);
95
+ border:1px solid rgba(148,163,184,.14);
96
+ border-radius:14px;
97
+ overflow:hidden;
98
+ }
99
+ .card__head{
100
+ padding:16px 16px 0 16px;
101
+ }
102
+ .card__title{
103
+ margin:0;
104
+ font-size:16px;
105
+ letter-spacing:.3px;
106
+ color:#cbd5e1;
107
+ }
108
+ .card__body{
109
+ padding:16px;
110
+ display:flex; flex-wrap:wrap; gap:10px;
111
+ }
112
+
113
+ /* ===== Pill Buttons (colorful) ===== */
114
+ .btn{
115
+ --btn-bg: #334155;
116
+ --btn-txt: #e2e8f0;
117
+ --btn-ring: transparent;
118
+ appearance:none; border:none; cursor:pointer;
119
+ padding:12px 16px; min-width:110px;
120
+ border-radius:999px;
121
+ background: var(--btn-bg);
122
+ color: var(--btn-txt);
123
+ font-weight:700; font-size:14px; letter-spacing:.2px;
124
+ transition: transform .15s ease, box-shadow .15s ease, background .15s ease, outline-color .15s ease;
125
+ outline:2px solid transparent; outline-offset:2px;
126
+ }
127
+ .btn:hover{ transform: translateY(-2px); box-shadow: 0 8px 20px rgba(0,0,0,.25); }
128
+ .btn:active{ transform: translateY(0); }
129
+
130
+ .btn--active{
131
+ box-shadow: 0 8px 30px rgba(16,185,129,.35);
132
+ outline-color: rgba(34,211,238,.45);
133
+ }
134
+
135
+ /* category palettes */
136
+ .grade .btn{ --btn-bg: linear-gradient(135deg,#2563eb,#22d3ee); }
137
+ .subject .btn{ --btn-bg: linear-gradient(135deg,#7c3aed,#ec4899); }
138
+ .board .btn{ --btn-bg: linear-gradient(135deg,#22c55e,#84cc16); }
139
+ .test .btn{ --btn-bg: linear-gradient(135deg,#f59e0b,#ef4444); }
140
+ .qtype .btn{ --btn-bg: linear-gradient(135deg,#06b6d4,#6366f1); }
141
+ .adv .btn{ --btn-bg: linear-gradient(135deg,#14b8a6,#8b5cf6); }
142
+
143
+ /* Generate button */
144
+ .generate{
145
+ width:100%;
146
+ padding:16px;
147
+ border-radius:14px;
148
+ background: linear-gradient(135deg, #10b981, #22d3ee);
149
+ color:#001923;
150
+ font-weight:900; font-size:16px; letter-spacing:.4px;
151
+ border:none; cursor:pointer;
152
+ box-shadow: 0 10px 28px rgba(34,211,238,.25);
153
+ transition: transform .15s ease, box-shadow .15s ease, filter .15s;
154
+ }
155
+ .generate:hover{ transform: translateY(-2px); box-shadow: 0 14px 34px rgba(34,211,238,.35); }
156
+ .generate:active{ transform: translateY(0); }
157
+
158
+ /* Result box */
159
+ .result{
160
+ display:none;
161
+ margin-top:16px;
162
+ background: rgba(2,6,23,.6);
163
+ border:1px solid rgba(148,163,184,.2);
164
+ border-radius:14px; padding:16px;
165
+ }
166
+ .result p{
167
+ margin:0 0 10px 0; color:#e2e8f0; text-align:center; font-weight:700;
168
+ }
169
+ textarea{
170
+ width:100%; height:130px; resize:vertical;
171
+ background:#0b1224; color:#e2e8f0; border:1px solid rgba(148,163,184,.25);
172
+ border-radius:12px; padding:12px; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;
173
+ outline:none;
174
+ }
175
+ .open-gpt{
176
+ margin-top:12px; display:none;
177
+ width:100%; padding:12px 16px; border-radius:12px; border:none; cursor:pointer;
178
+ background: linear-gradient(135deg,#8b5cf6,#22d3ee);
179
+ color:#06121b; font-weight:900; letter-spacing:.3px;
180
+ box-shadow: 0 10px 28px rgba(139,92,246,.35);
181
+ }
182
+ .footer{
183
+ padding:0 24px 24px 24px; color:var(--muted); font-size:12px; text-align:center;
184
+ }
185
+
186
+ /* Layout spans */
187
+ .span-6{ grid-column: span 6; }
188
+ .span-12{ grid-column: span 12; }
189
+ @media (max-width: 980px){ .span-6{ grid-column: span 12; } }
190
+ </style>
191
+ </head>
192
+ <body>
193
+ <div class="wrap">
194
+ <div class="app" role="application" aria-label="EduAssess Pro — Smart Exam Paper Designer">
195
+ <div class="app__header">
196
+ <div>
197
+ <h1 class="title">EduAssess Pro — Smart Exam Paper Designer</h1>
198
+ <p class="subtitle">Pick options with colorful buttons, generate a prompt, and jump straight into your Custom GPT.</p>
199
+ </div>
200
+ <div class="badge">Static • Hugging Face Ready</div>
201
+ </div>
202
+
203
+ <div class="grid">
204
+
205
+ <!-- Grade -->
206
+ <section class="card span-6 grade" aria-labelledby="grade-h">
207
+ <div class="card__head"><h2 id="grade-h" class="card__title">1) Select Grade</h2></div>
208
+ <div class="card__body" id="grade-options">
209
+ <button class="btn" data-type="grade" data-value="Grade 1">Grade 1</button>
210
+ <button class="btn" data-type="grade" data-value="Grade 2">Grade 2</button>
211
+ <button class="btn" data-type="grade" data-value="Grade 3">Grade 3</button>
212
+ <button class="btn" data-type="grade" data-value="Grade 4">Grade 4</button>
213
+ <button class="btn" data-type="grade" data-value="Grade 5">Grade 5</button>
214
+ <button class="btn" data-type="grade" data-value="Grade 6">Grade 6</button>
215
+ <button class="btn" data-type="grade" data-value="Grade 7">Grade 7</button>
216
+ <button class="btn" data-type="grade" data-value="Grade 8">Grade 8</button>
217
+ <button class="btn" data-type="grade" data-value="Grade 9">Grade 9</button>
218
+ <button class="btn" data-type="grade" data-value="Grade 10">Grade 10</button>
219
+ <button class="btn" data-type="grade" data-value="Grade 11">Grade 11</button>
220
+ <button class="btn" data-type="grade" data-value="Grade 12">Grade 12</button>
221
+ </div>
222
+ </section>
223
+
224
+ <!-- Subject -->
225
+ <section class="card span-6 subject" aria-labelledby="subject-h">
226
+ <div class="card__head"><h2 id="subject-h" class="card__title">2) Select Subject</h2></div>
227
+ <div class="card__body" id="subject-options">
228
+ <button class="btn" data-type="subject" data-value="Mathematics">Mathematics</button>
229
+ <button class="btn" data-type="subject" data-value="Urdu">Urdu</button>
230
+ <button class="btn" data-type="subject" data-value="English">English</button>
231
+ <button class="btn" data-type="subject" data-value="Science">Science</button>
232
+ <button class="btn" data-type="subject" data-value="Physics">Physics</button>
233
+ <button class="btn" data-type="subject" data-value="Chemistry">Chemistry</button>
234
+ <button class="btn" data-type="subject" data-value="Biology">Biology</button>
235
+ <button class="btn" data-type="subject" data-value="Computer Science">Computer Science</button>
236
+ <button class="btn" data-type="subject" data-value="Islamiat">Islamiat</button>
237
+ <button class="btn" data-type="subject" data-value="Pakistan Studies">Pakistan Studies</button>
238
+ </div>
239
+ </section>
240
+
241
+ <!-- Board -->
242
+ <section class="card span-6 board" aria-labelledby="board-h">
243
+ <div class="card__head"><h2 id="board-h" class="card__title">3) Select Board</h2></div>
244
+ <div class="card__body" id="board-options">
245
+ <button class="btn" data-type="board" data-value="PCTB (Punjab)">PCTB (Punjab)</button>
246
+ <button class="btn" data-type="board" data-value="FBISE (Federal)">FBISE (Federal)</button>
247
+ <button class="btn" data-type="board" data-value="Sindh Board">Sindh Board</button>
248
+ <button class="btn" data-type="board" data-value="KPK Board">KPK Board</button>
249
+ <button class="btn" data-type="board" data-value="Balochistan Board">Balochistan Board</button>
250
+ <button class="btn" data-type="board" data-value="AKUEB">AKUEB</button>
251
+ </div>
252
+ </section>
253
+
254
+ <!-- Test Type -->
255
+ <section class="card span-6 test" aria-labelledby="test-h">
256
+ <div class="card__head"><h2 id="test-h" class="card__title">4) Select Test Type</h2></div>
257
+ <div class="card__body" id="test-type-options">
258
+ <button class="btn" data-type="testType" data-value="Summative">Summative</button>
259
+ <button class="btn" data-type="testType" data-value="Formative">Formative</button>
260
+ <button class="btn" data-type="testType" data-value="Diagnostic">Diagnostic</button>
261
+ </div>
262
+ </section>
263
+
264
+ <!-- Question Types -->
265
+ <section class="card span-12 qtype" aria-labelledby="qtype-h">
266
+ <div class="card__head"><h2 id="qtype-h" class="card__title">5) Select Question Types (Multi-select)</h2></div>
267
+ <div class="card__body" id="question-type-options">
268
+ <button class="btn" data-type="questionType" data-value="MCQs">MCQs</button>
269
+ <button class="btn" data-type="questionType" data-value="Short Questions">Short Questions</button>
270
+ <button class="btn" data-type="questionType" data-value="Long Questions">Long Questions</button>
271
+ <button class="btn" data-type="questionType" data-value="Practical / Diagram-based Questions">Practical / Diagram</button>
272
+ <button class="btn" data-type="questionType" data-value="Moral / Ethical Questions">Moral / Ethical</button>
273
+ <button class="btn" data-type="questionType" data-value="Islamic Questions">Islamic</button>
274
+ </div>
275
+ </section>
276
+
277
+ <!-- Advanced -->
278
+ <section class="card span-12 adv" aria-labelledby="adv-h">
279
+ <div class="card__head"><h2 id="adv-h" class="card__title">6) Advanced Options</h2></div>
280
+ <div class="card__body" id="advanced-options">
281
+ <button class="btn" id="bloom-toggle" data-type="bloom" data-value="no">Bloom's Levels: No</button>
282
+ <button class="btn" data-type="difficulty" data-value="Easy">Easy</button>
283
+ <button class="btn" data-type="difficulty" data-value="Moderate">Moderate</button>
284
+ <button class="btn" data-type="difficulty" data-value="Hard">Hard</button>
285
+ <button class="btn" data-type="language" data-value="English">English</button>
286
+ <button class="btn" data-type="language" data-value="Urdu">Urdu</button>
287
+ <button class="btn" data-type="language" data-value="Bilingual">Bilingual</button>
288
+ </div>
289
+ </section>
290
+
291
+ <!-- Generate -->
292
+ <section class="card span-12">
293
+ <div class="card__body">
294
+ <button id="generatePromptBtn" class="generate">Generate Prompt & Open Custom GPT</button>
295
+ <div id="result" class="result" role="region" aria-live="polite" aria-label="Prompt Result">
296
+ <p id="ready-text">your prompt is Ready Now Paste it</p>
297
+ <textarea id="promptOutput" readonly></textarea>
298
+ <button id="openGptBtn" class="open-gpt">Open EduAssess Pro GPT</button>
299
+ </div>
300
+ </div>
301
+ </section>
302
+
303
+ </div>
304
+
305
+ <div class="footer">© EduAssess Pro — Static Space • Beautiful colorful buttons • Copy to clipboard • Auto-open Custom GPT</div>
306
+ </div>
307
+ </div>
308
+
309
+ <!-- ====== Config: Your Custom GPT URL ====== -->
310
+ <script>
311
+ window.CUSTOM_GPT_URL = "https://chatgpt.com/g/g-68697e4c49508191b175d86830b34d85-eduassess-pro-smart-exam-paper-designer";
312
+ </script>
313
+
314
+ <!-- ====== Inline App Logic ====== -->
315
+ <script>
316
+ (function(){
317
+ const CUSTOM_GPT_URL = window.CUSTOM_GPT_URL;
318
+ const options = {
319
+ grade:null, subject:null, board:null, testType:null,
320
+ questionTypes:[], bloom:"no", difficulty:null, language:null
321
+ };
322
+
323
+ const $ = (s)=>document.querySelector(s);
324
+ const $$ = (s)=>document.querySelectorAll(s);
325
+
326
+ function setActive(groupSelector, btn){
327
+ $$(groupSelector+' .btn[data-type="'+btn.dataset.type+'"]').forEach(b=>b.classList.remove('btn--active'));
328
+ btn.classList.add('btn--active');
329
+ }
330
+
331
+ function toggleActive(btn){ btn.classList.toggle('btn--active'); }
332
+
333
+ function handleClick(btn){
334
+ const type = btn.dataset.type, value = btn.dataset.value;
335
+ if(type !== 'questionType' && type !== 'bloom'){
336
+ setActive('.card__body', btn);
337
+ options[type] = value;
338
+ } else if(type === 'questionType'){
339
+ toggleActive(btn);
340
+ if(options.questionTypes.includes(value)){
341
+ options.questionTypes = options.questionTypes.filter(v => v !== value);
342
+ } else { options.questionTypes.push(value); }
343
+ }
344
+ }
345
+
346
+ // Attach to all option buttons except bloom (handled separately)
347
+ $$('.btn[data-type]').forEach(btn=>{
348
+ if(btn.id === 'bloom-toggle') return;
349
+ btn.addEventListener('click', ()=>handleClick(btn));
350
+ });
351
+
352
+ // Bloom toggle
353
+ const bloomToggle = $('#bloom-toggle');
354
+ bloomToggle.addEventListener('click', ()=>{
355
+ bloomToggle.classList.toggle('btn--active');
356
+ const on = bloomToggle.classList.contains('btn--active');
357
+ bloomToggle.textContent = on ? "Bloom's Levels: Yes" : "Bloom's Levels: No";
358
+ bloomToggle.dataset.value = on ? 'yes' : 'no';
359
+ options.bloom = on ? 'yes' : 'no';
360
+ });
361
+
362
+ function buildPrompt(o){
363
+ let p = `I need a paper for ${o.grade}, on the subject of ${o.subject}, aligned with the ${o.board}. The test type is ${o.testType}. Please include the following question types: ${o.questionTypes.join(', ')}.`;
364
+ if(o.bloom === 'yes') p += " The questions should be based on Bloom's Taxonomy.";
365
+ if(o.difficulty) p += ` The difficulty level should be ${o.difficulty}.`;
366
+ if(o.language) p += ` The paper should be in ${o.language}.`;
367
+ return p;
368
+ }
369
+ function ready(o){
370
+ return !!(o.grade && o.subject && o.board && o.testType && o.questionTypes.length>0 && o.language);
371
+ }
372
+ async function copy(text){
373
+ try{
374
+ if(navigator.clipboard && window.isSecureContext){ await navigator.clipboard.writeText(text); return; }
375
+ const ta=document.createElement('textarea'); ta.value=text; document.body.appendChild(ta); ta.select();
376
+ document.execCommand('copy'); document.body.removeChild(ta);
377
+ }catch(e){}
378
+ }
379
+
380
+ const resultBox = $('#result');
381
+ const promptOutput = $('#promptOutput');
382
+ const openBtn = $('#openGptBtn');
383
+ const generateBtn = $('#generatePromptBtn');
384
+
385
+ // Difficulty & Language single-select grouping
386
+ function exclusiveClickSetup(attr){
387
+ $(`.adv`).querySelectorAll(`.btn[data-type="${attr}"]`).forEach(b=>{
388
+ b.addEventListener('click', ()=>{
389
+ // remove active from siblings of same type
390
+ $(`.adv`).querySelectorAll(`.btn[data-type="${attr}"]`).forEach(x=>x.classList.remove('btn--active'));
391
+ b.classList.add('btn--active');
392
+ options[attr] = b.dataset.value;
393
+ });
394
+ });
395
+ }
396
+ exclusiveClickSetup('difficulty');
397
+ exclusiveClickSetup('language');
398
+
399
+ // Board/Grade/Subject/Test single-select grouping
400
+ ['grade','subject','board','testType'].forEach(attr=>{
401
+ document.querySelectorAll(`.btn[data-type="${attr}"]`).forEach(b=>{
402
+ b.addEventListener('click', ()=>{
403
+ document.querySelectorAll(`.btn[data-type="${attr}"]`).forEach(x=>x.classList.remove('btn--active'));
404
+ b.classList.add('btn--active');
405
+ options[attr] = b.dataset.value;
406
+ });
407
+ });
408
+ });
409
+
410
+ openBtn.addEventListener('click', ()=>{
411
+ window.open(CUSTOM_GPT_URL, '_blank', 'noopener,noreferrer');
412
+ });
413
+
414
+ generateBtn.addEventListener('click', async ()=>{
415
+ if(!ready(options)){
416
+ alert('Please select all required options: Grade, Subject, Board, Test Type, Question Types, and Language.');
417
+ return;
418
+ }
419
+ const prompt = buildPrompt(options);
420
+ promptOutput.value = prompt;
421
+ resultBox.style.display = 'block';
422
+ document.getElementById('ready-text').textContent = 'your prompt is Ready Now Paste it';
423
+
424
+ await copy(prompt);
425
+ const popup = window.open(CUSTOM_GPT_URL, '_blank', 'noopener,noreferrer');
426
+ if(!popup){ openBtn.style.display = 'block'; }
427
+ });
428
+ })();
429
+ </script>
430
  </body>
431
+ </html>