ÿþ<!DOCTYPE html> <html lang="hi"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>UP * A 2 ? 8  >  8 M  G , 2 - 8 > . > ( M /  M  > (  8 >  ( . G    ( 0 G  0 </title> <link href="img/logo1.jpg" rel="icon"> <script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js"></script> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> <style> :root { --primary: #4361ee; --primary-dark: #3f37c9; --secondary: #4895ef; --danger: #f72585; --success: #4cc9f0; --light: #f8f9fa; --dark: #212529; --gray: #6c757d; --border-radius: 12px; --box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1); --transition: all 0.3s ease; } * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; } body { background: linear-gradient(135deg, #f5f7fa 0%, #e2e8f0 100%); min-height: 100vh; display: flex; justify-content: center; align-items: center; padding: 20px; color: var(--dark); line-height: 1.6; } .container { width: 100%; max-width: 950px; background: white; border-radius: var(--border-radius); box-shadow: var(--box-shadow); overflow: hidden; transition: var(--transition); animation: fadeIn 0.5s ease-out; } @keyframes fadeIn { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } .header { background: linear-gradient(135deg, var(--primary), var(--primary-dark)); color: white; padding: 30px 20px; text-align: center; position: relative; overflow: hidden; } .header::before { content: ''; position: absolute; top: -50px; right: -50px; width: 150px; height: 150px; background: rgba(255, 255, 255, 0.1); border-radius: 50%; } .header h1 { font-size: 2rem; margin-bottom: 10px; font-weight: 700; position: relative; z-index: 1; } .header p { font-size: 1rem; opacity: 0.9; position: relative; z-index: 1; } .content-area { padding: 30px; } .hidden { display: none !important; } .btn { display: inline-block; padding: 12px 28px; border-radius: 50px; font-weight: 600; cursor: pointer; transition: var(--transition); border: none; text-align: center; box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1); margin: 10px 5px; } .btn-primary { background: var(--primary); color: white; } .btn-primary:hover { background: var(--primary-dark); transform: translateY(-2px); box-shadow: 0 8px 15px rgba(67, 97, 238, 0.3); } .btn-success { background: var(--success); color: white; } .btn-success:hover { background: #3ab0d6; transform: translateY(-2px); box-shadow: 0 8px 15px rgba(76, 201, 240, 0.3); } .btn-danger { background: var(--danger); color: white; } .btn-danger:hover { background: #d3166b; transform: translateY(-2px); box-shadow: 0 8px 15px rgba(247, 37, 133, 0.3); } .btn-level { background: var(--light); color: var(--dark); border: 2px solid var(--gray); font-size: 1.2rem; padding: 15px 30px; width: 200px; } .btn-level:hover { transform: translateY(-5px); box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2); } .btn-level.selected { background: var(--primary); color: white; border-color: var(--primary); } .btn-group { display: flex; flex-wrap: wrap; justify-content: center; gap: 10px; margin: 20px 0; } .level-buttons { display: flex; justify-content: center; gap: 20px; margin: 30px 0; } .section-title { text-align: center; margin-bottom: 25px; color: var(--primary-dark); font-size: 1.5rem; position: relative; padding-bottom: 10px; } .section-title::after { content: ''; position: absolute; bottom: 0; left: 50%; transform: translateX(-50%); width: 80px; height: 3px; background: var(--secondary); border-radius: 3px; } .checkbox-container { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 12px; margin: 25px 0; max-height: 500px; overflow-y: auto; padding: 10px; border: 1px solid #eee; border-radius: var(--border-radius); } .checkbox-item { display: flex; align-items: center; } .checkbox-item input { margin-right: 10px; width: 18px; height: 18px; cursor: pointer; } .checkbox-item label { cursor: pointer; font-size: 0.9rem; } .generated-paper { padding: 30px; } .instructions { margin-bottom: 30px; padding: 20px; background: #f8f9fa; border-radius: var(--border-radius); } .instructions ol { padding-left: 20px; margin-top: 10px; } .instructions li { margin-bottom: 8px; } .question-section { margin-bottom: 30px; } .section-heading { font-weight: 600; color: var(--primary-dark); margin-bottom: 15px; padding-bottom: 5px; border-bottom: 1px solid #eee; } .question { margin-bottom: 20px; page-break-inside: avoid; } .question-text { font-weight: 500; margin-bottom: 8px; } .option { margin-left: 20px; margin-bottom: 5px; } .action-buttons { display: flex; justify-content: center; flex-wrap: wrap; gap: 15px; margin-top: 40px; } .answer-sheet { margin-top: 40px; padding: 20px; background: #f8f9fa; border-radius: var(--border-radius); } .answer-table { width: 100%; border-collapse: collapse; margin-top: 15px; } .answer-table th, .answer-table td { border: 1px solid #ddd; padding: 8px; text-align: center; } .answer-table th { background-color: var(--primary); color: white; } .answer-table tr:nth-child(even) { background-color: #f2f2f2; } @media (max-width: 768px) { .header h1 { font-size: 1.6rem; } .content-area { padding: 20px; } .checkbox-container { grid-template-columns: 1fr; } .btn { padding: 10px 20px; font-size: 0.9rem; } .btn-level { width: 150px; font-size: 1rem; padding: 12px 20px; } .level-buttons { flex-direction: column; align-items: center; } } @media (max-width: 480px) { .header { padding: 20px 15px; } .section-title { font-size: 1.3rem; } .action-buttons { flex-direction: column; align-items: center; } .btn { width: 100%; max-width: 250px; } } @media print { body { background: none; padding: 0; } .container { box-shadow: none; max-width: 100%; } .action-buttons { display: none; } .question { page-break-inside: avoid; } .header { -webkit-print-color-adjust: exact; print-color-adjust: exact; } } .home-icon { position: absolute; top: 20px; left: 20px; color: white; font-size: 24px; cursor: pointer; transition: var(--transition); z-index: 2; } .home-icon:hover { transform: scale(1.1); color: rgba(255, 255, 255, 0.8); } @media (max-width: 480px) { .home-icon { font-size: 20px; top: 15px; left: 15px; } } @media print { .home-icon { display: none; } } .temp-pdf-container { font-family: Arial, sans-serif; line-height: 1.5; width: 794px; background-color: white; color: black; } .question { page-break-inside: avoid; break-inside: avoid; } .text-center { text-align: center; margin-bottom: 15px; } </style> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4930137336556867" crossorigin="anonymous"></script> <!-- Google tag (gtag.js) --> <script async src="https://www.googletagmanager.com/gtag/js?id=G-KMZ9RJ62EY"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-KMZ9RJ62EY'); </script> </head> <body> <div class="container" id="startContainer"> <div class="header"> <a href="up-police-constable-assignment-generator.html" class="home-icon"><i class="fas fa-home"></i></a> <h1>UP * A 2 ? 8  >  8 M  G , 2 </h1> <p>8 > . > ( M /  M  > (  8 >  ( . G    ( 0 G  0 </p> </div> <div class="content-area"> <div id="startScreen"> <h2 class="section-title">8 > . > ( M /  M  > (  8 >  ( . G    ( 0 G  0 </h2> <div class="btn-group"> <button class="btn btn-primary" id="startGeneratingBtn"> 8 >  ( . G   , ( >   </button> </div> </div> <div id="subjectSelection" class="hidden"> <h2 class="section-title">5 ? 7 /  >  / (  0 G  </h2> <div class="btn-group"> <button class="btn btn-primary" id="selectGKBtn">8 > . > ( M /  M  > (  5   0    + G / 0 M 8 </button> </div> </div> <div id="chapterSelection" class="hidden"> <h2 class="section-title"> ' M / > / / 5 ? 7 /  A ( G  </h2> <form id="chapterForm"> <div class="checkbox-container" id="chapterCheckboxContainer"> <!-- Chapters will be dynamically loaded from questions object --> </div> </form> <div class="btn-group"> <button class="btn btn-danger" id="backToStartBtn">* M 0 > 0  - * 0 5 > * 8  >   </button> <button class="btn btn-success" id="generateAssignmentBtn"> 8 >  ( . G   , ( >   </button> </div> </div> <div id="levelSelection" class="hidden"> <h2 class="section-title"> ? ( >  8 M $ 0  A ( G  </h2> <p class="text-center"> * ( G  8 >  ( . G    G 2 ?  8 M $ 0  >  / (  0 G  :</p> <div class="level-buttons"> <button class="btn btn-level" id="level1Btn">8 M $ 0 1<br><small>, G 8 ?  8 M $ 0 </small></button> <button class="btn btn-level" id="level2Btn">8 M $ 0 2<br><small>. ' M / . 8 M $ 0 </small></button> <button class="btn btn-level" id="level3Btn">8 M $ 0 3<br><small>* 0 @  M 7 > 8 M $ 0 </small></button> </div> <div class="btn-group"> <button class="btn btn-danger" id="backToChaptersBtn">5 ? 7 / K  * 0 5 > * 8  >   </button> <button class="btn btn-success" id="generateFinalBtn"> 8 >  ( . G    ( 0 G   0 G  </button> </div> </div> </div> </div> <div class="container hidden" id="generatedPaperContainer"></div> <script> const { jsPDF } = window.jspdf; // ===================================================== // COMPLETE QUESTIONS DATABASE WITH 23 TOPICS (CHAPTER WISE) // * M 0 $ M / G   ' M / > /  G 2 ?  level1, level2, level3  G * M 0 6 M ( // ===================================================== const questions = { "8 > . > ( M / 5 ?  M  > ( ": { level1: [ { question: ". > ( 5 6 0 @ 0 . G  8 , 8 G , ! < @  M 0  % ?  L ( 8 @ 9 H ?", options: ["% > / 0 I  ! ", "2 ? 5 0 (/  C $ )", "* H   M 0 ? / >  ", "* @ / B 7  M 0  % ? "], answer: "B" }, { question: "* L ' K  . G  * M 0  > 6 8  6 M 2 G 7 #  G 2 ?   L ( 8 @  H 8  5 6 M /  9 H ?", options: ["  M 8 @  ( ", "( >   M 0 K  ( ", " > 0 M , ( ! >    M 8 >  ! ", "9 >  ! M 0 K  ( "], answer: "C" }, { question: "5 ?  > . ? ( C  @  . @ 8 G  L ( 8 > 0 K  9 K $ > 9 H ?", options: ["0 ?  G  M 8 ", "8 M  0 M 5 @ ", ", G 0 @ , G 0 @ ", "* G 2 >  M 0 > "], answer: "B" } ], level2: [ { question: "DNA . G  * >   > ( G 5 > 2 G ( >   M 0 K  ( @  M 7 > 0  L ( 8 G 9 H  ?", options: ["A, T, G, C", "A, U, G, C", "A, T, G, U", "T, U, G, C"], answer: "A" }, { question: "9 @ . K  M 2 K , ? ( . G   L ( 8 @ ' > $ A * >   > $ @ 9 H ?", options: ["$ >  , > ", " 8 M $ > ", "2 K 9 > ", ". H  M ( @ 6 ? / . "], answer: "C" } ], level3: [ { question: "( ? . M ( 2 ?  ? $ . G  8 G  L ( 8 >  @ 5 > # A & M 5 > 0 > 9 K ( G 5 > 2 > 0 K  ( 9 @  9 H ?", options: [" >  + >  ! ", "$ * G & ?  (TB)", ". 2 G 0 ? / > ", "9 H  > "], answer: "C" }, { question: ". > ( 5 0  M $  > pH . > ( 2  -   ? $ ( > 9 K $ > 9 H ?", options: ["7.0", "7.4", "7.8", "8.0"], answer: "B" } ] }, "- > 0 $ @ /  $ ? 9 > 8 ": { level1: [ { question: "8 M 5 $  $ M 0 $ >  G 8 . / - > 0 $  G * M 0 % .  5 0 M ( 0  ( 0 2  L ( % G ?", options: ["2 I 0 M ! . >   , G  ( ", "2 I 0 M !  H ( ?   ", "2 I 0 M ! ! 2 9 L  @ ", "2 I 0 M ! 5 G 2 G 8 M 2 @ "], answer: "A" }, { question: " A * M $ 5  6  > 8  8 M % > *   L ( % > ?", options: ["8 . A & M 0  A * M $ ", "  & M 0  A * M $ * M 0 % . ", "6 M 0 @  A * M $ ", "  & M 0  A * M $ & M 5 ? $ @ / "], answer: "C" }, { question: "1857  G 5 ? & M 0 K 9  K  ? 8 ( G '* M 0 % . 8 M 5 $  $ M 0 $ > 8   M 0 > . '  9 > ?", options: [", > 2    > ' 0 $ ? 2  ", "8 A - > 7   & M 0 , K 8 ", "5 @ 0 8 > 5 0  0 ", ". 9 > $ M . >  >  ' @ "], answer: "C" } ], level2: [ { question: "* > ( @ * $  @ $ @ 8 0 @ 2 ! < >   ? (  G , @  9 A  ?", options: ["  , 0  0 9 G . B ", ", > , 0  0  , M 0 > 9 ? . 2 K & @ ", " 9 . & 6 > 9  , M & > 2 @  0 . 0 > G ", ". A 9 . M . &  L 0 @  0 * C % M 5 @ 0 >   L 9 > ( "], answer: "C" }, { question: " 6 K   G 6 ? 2 > 2 G   ? 8 2 ? * ? . G  2 ?  G   9 H  ?", options: ["& G 5 ( >  0 @ ", ", M 0 > 9 M . @ ", " 0 K 7 M @ ", " A * M $ 2 ? * ? "], answer: "B" } ], level3: [ { question: ", L & M ' ' 0 M .  G * M 0  > 0  G 2 ?  8 . M 0 >   6 K  ( G  ? 8 G 6 M 0 @ 2   > - G  > % > ?", options: [". 9 G  & M 0  0 8   . ? $ M 0 > ", " ( A 0 A & M ' ", " 6 M / * ", ", A & M '  K 7 "], answer: "A" }, { question: "5 ?  / (  0 8 > . M 0 >  M /  > 8 , 8 G * M 0 8 ? & M ' 6 > 8   L ( % > ?", options: ["9 0 ? 9 0 * M 0 % . ", ", A  M  > * M 0 % . ", " C 7 M # & G 5 0 > / ", "0 > . 0 > / "], answer: "C" } ] }, "- > 0 $ @ / 8  5 ? ' > (  5  0 >  5 M / 5 8 M % > ": { level1: [ { question: "- > 0 $ @ / 8  5 ? ' > (  , 2 >  B 9 A  ?", options: ["26  ( 5 0 @ 1950", "15   8 M $ 1947", "26 ( 5  , 0 1949", "26  ( 5 0 @ 1949"], answer: "A" }, { question: "8  5 ? ' > (  >   $ ? . - >   L ( 8 > 9 H ?", options: ["- >  XX", "- >  XXI", "- >  XXII", "- >  XXIII"], answer: "C" }, { question: "0 >  M / 8 - >  G 8 & 8 M / K   >  A ( > 5  ? $ ( G 5 0 M 7 K   G 2 ?  9 K $ > 9 H ?", options: ["5 5 0 M 7 ", "6 5 0 M 7 ", "4 5 0 M 7 ", "  @ 5 ( "], answer: "B" } ], level2: [ { question: ". L 2 ?   0 M $ 5 M / K   K 8  5 ? ' > ( . G   ? 8 8  6 K ' ( & M 5 > 0 >  K ! < >  / > ?", options: ["425 >  ", "445 >  ", "525 >  ", "615 >  "], answer: "A" }, { question: "0 > 7 M  M 0 * $ ?  G . 9 > - ? / K   @ * M 0  M 0 ? / >  ? 8  ( A  M  G & . G  9 H ?", options: [" ( A  M  G & 56", " ( A  M  G & 61", " ( A  M  G & 72", " ( A  M  G & 356"], answer: "B" } ], level3: [ { question: "8  5 ? ' > (  @  ? 8  ( A 8 B  @ . G  & 2 -, & 2 5 ? 0 K ' @  > ( B (  > * M 0 > 5 ' > ( 9 H ?", options: ["85 @  ", "95 @  ", "105 @  ", "115 @  "], answer: "C" }, { question: "- > 0 $  G * M 0 % . . A  M /  A ( > 5  / A  M $  L ( % G ?", options: ["8 A  A . > 0 8 G ( ", " @ . 8 M 5 > . @ ( > % ( ", " 8 .* @ . 8 G ( 5 0 M . > ", " G .5 @ . G . 8 A  & 0 . "], answer: "A" } ] }, "- > 0 $ @ /  0 M % 5 M / 5 8 M % > ": { level1: [ { question: "- > 0 $ . G  / K  ( >  / K   >  (  , 9 A  ?", options: ["1947", "1950", "1951", "1952"], answer: "B" }, { question: "( > , > 0 M ! (NABARD)  > . A  M / > 2 /  9 >  9 H ?", options: ["(  & ? 2 M 2 @ ", ". A  ,  ", " K 2  > $ > ", " G ( M (  "], answer: "B" }, { question: ". A & M 0 > 8 M + @ $ ?  ? 8 G  9 $ G 9 H  ?", options: ["5 8 M $ A    @  @ . $ K  . G  8 > . > ( M / 5 C & M ' ? ", "5 8 M $ A    @  @ . $ K  . G   . @ ", ", G 0 K   > 0 @ ", "5 ? & G 6 @ . A & M 0 > -  ! > 0 "], answer: "A" } ], level2: [ { question: "- > 0 $  > 8 , 8 G , ! < > 5 > # ?  M / ?  , H    L ( 8 > 9 H ?", options: [" 8 , @   ", "  ! @  + 8 @ , H   ", "  8 @   8 @   , H   ", "* @  ( , @ "], answer: "A" }, { question: "8 G , @ (SEBI)  ? 8 $ 0 9  > 8   ( 9 H ?", options: [", H   ?   ", ", @ . > ", "* M 0 $ ? - B $ ? , >  > 0 ( ? / > .  ", "5 ? & G 6 @ . A & M 0 > "], answer: "C" } ], level3: [ { question: "- > 0 $ . G  5 8 M $ A  5  8 G 5 >  0 (GST)  ? 8 5 0 M 7 2 >  B 9 A  ?", options: ["2016", "2017", "2018", "2019"], answer: "B" }, { question: ", H   ?    M 7 G $ M 0 . G  ', G 8 2 -III . > ( &  ! '  ? 8 8 G 8  ,  ' ? $ 9 H ?", options: ["* B   @ * 0 M / > * M $ $ > ", ", M / >  & 0 ", " 0 M  5 8 B 2 @ ", "5 ? & G 6 @ ( ? 5 G 6 "], answer: "A" } ] }, " $ M $ 0 * M 0 & G 6 0 >  M /  @ 6 ?  M 7 > , 8  8 M  C $ ?  0 8 > . >  ?  * M 0 % >   ": { level1: [ { question: " $ M $ 0 * M 0 & G 6  > 0 >  M / * 6 A  L ( 8 > 9 H ?", options: [", >  ", "9 ? 0 # ", " > / ", ", > 0 9 8 ?   > "], answer: "D" }, { question: "$ >  . 9 2  9 >  8 M % ? $ 9 H ?", options: ["& ? 2 M 2 @ ", "  0 > ", "2  ( ", "5 > 0 > # 8 @ "], answer: "B" }, { question: " $ M $ 0 * M 0 & G 6  > 0 >  M / 5 C  M 7  L ( 8 > 9 H ?", options: ["* @ * 2 ", ", 0  & ", " . ", "( @ . "], answer: "A" } ], level2: [ { question: " %  ( C $ M / 6 H 2 @  > * M 0 . A   G  & M 0  L ( 8 > 9 H ?", options: ["2  ( ", "5 > 0 > # 8 @ ", " 2 > 9 > , > & ", ". % A 0 > "], answer: "A" }, { question: " $ M $ 0 * M 0 & G 6  > 8 , 8 G , ! < > . G 2 >  L ( 8 > 9 H ?", options: [" A  - . G 2 > ", "$ >  . 9 K $ M 8 5 ", "0 > . 2 @ 2 > ", ", A & M ' . 9 K $ M 8 5 "], answer: "A" } ], level3: [ { question: " $ M $ 0 * M 0 & G 6 . G  8 0 M 5 > ' ?  8 >  M 7 0 $ > & 0 5 > 2 >  ? 2 >  L ( 8 > 9 H ?", options: [" L $ . , A & M ' (  0 ", "2  ( ", " > ( * A 0 ", " 2 > 9 > , > & "], answer: "A" }, { question: "* M 0 8 ? & M ' '   > 8 M ( > (  >  '  9 >  8 M % ? $ 9 H ?", options: ["9 0 ? & M 5 > 0 ", "5 > 0 > # 8 @ ", " 7 ?  G 6 ", "* M 0 / >  0 >  "], answer: "B" } ] }, " $ M $ 0 * M 0 & G 6 . G  0 >  8 M 5 , * A 2 ? 8  0 8 > . > ( M / * M 0 6 > 8 ( ?  5 M / 5 8 M % > ": { level1: [ { question: " $ M $ 0 * M 0 & G 6 * A 2 ? 8  > . A  M / > 2 /  9 >  9 H ?", options: ["2  ( ", "* M 0 / >  0 >  ", " >  ? / > , > & ", "5 > 0 > # 8 @ "], answer: "A" }, { question: "UP . G  * A 2 ? 8  / A  M $ * M 0 # > 2 @  ? 8 6 9 0 8 G 6 A 0 B 9 A  ?", options: ["2  ( ", "( K  ! > ", " >  ? / > , > & ", " > ( * A 0 "], answer: "C" }, { question: " $ M $ 0 * M 0 & G 6 . G   ? 2 >  2 G  M  0  > . A  M /  > 0 M /  M / > 9 H ?", options: ["0 >  8 M 5 5 8 B 2 @ ", "* A 2 ? 8 * M 0 6 > 8 ( ", "( M / > / ?   > 0 M / ", "6 ?  M 7 > "], answer: "A" } ], level2: [ { question: "UP * A 2 ? 8 . G  '! > / 2 100' 8 G 5 >  ? 8 5 0 M 7 6 A 0 B 9 A  ?", options: ["2015", "2016", "2017", "2018"], answer: "C" }, { question: " $ M $ 0 * M 0 & G 6 0 >  8 M 5 8  9 ? $ >  ? 8 5 0 M 7 2 >  B 9 A  ?", options: ["2005", "2006", "2007", "2008"], answer: "B" } ], level3: [ { question: "* A 2 ? 8  ' @  M 7  (SP)  @ ( ? / A  M $ ?  ? 8  G & M 5 > 0 >  @  > $ @ 9 H ?", options: [" C 9 .  $ M 0 > 2 / ", "0 >  M / 8 0  > 0 ", "0 >  M / * A 2 ? 8 8 G 5 >  / K  ", "UPSC"], answer: "B" }, { question: "UP . G  '8 >  , 0 8 G 2 '  @ 8 M % > * ( >  ? 8 5 0 M 7 9 A  ?", options: ["2010", "2012", "2014", "2016"], answer: "C" } ] }, ". 9 $ M 5 * B 0 M # & ? (  5  $ ? % ? / >  ": { level1: [ { question: " # $  $ M 0 & ? 5 8  , . ( > / >  > $ > 9 H ?", options: ["15   8 M $ ", "26  ( 5 0 @ ", "2   M  B , 0 ", "30  ( 5 0 @ "], answer: "B" }, { question: "5 ? 6 M 5 * 0 M / > 5 0 # & ? 5 8  , . ( > / >  > $ > 9 H ?", options: ["5  B ( ", "5  A 2 >  ", "22  * M 0 H 2 ", "16 8 ? $  , 0 "], answer: "A" }, { question: "  $ 0 M 0 > 7 M  M 0 @ / . 9 ? 2 > & ? 5 8  , . ( > / >  > $ > 9 H ?", options: ["8 . > 0 M  ", "8 + 0 5 0 @ ", "8  * M 0 H 2 ", "8 .  "], answer: "A" } ], level2: [ { question: "0 > 7 M  M 0 @ /  G 2 & ? 5 8  ? 8  @  /  $ @ * 0 . ( > / >  > $ > 9 H ?", options: [". G  0 ' M / > (   & ", "8  ? ( $ G  & A 2  0 ", ". ? 2 M  > 8 ?  9 ", "* @ . @ . 7 > "], answer: "A" }, { question: "5 ? 6 M 5  ! M 8 & ? 5 8  , . ( > / >  > $ > 9 H ?", options: ["1 & ? 8  , 0 ", "1 ( 5  , 0 ", "1   M  B , 0 ", "1 8 ? $  , 0 "], answer: "A" } ], level3: [ { question: " L ( 8 > & ? ( '5 ? 6 M 5  & ? 5 > 8 @ & ? 5 8 '  G 0 B * . G  . ( > / >  > $ > 9 H ?", options: ["9   8 M $ ", "5 8 ? $  , 0 ", "12   M  B , 0 ", "18 ( 5  , 0 "], answer: "A" }, { question: "0 > 7 M  M 0 @ / 5 ?  M  > ( & ? 5 8  ? 8 * 2  M 7 M / . G  . ( > / >  > $ > 9 H ?", options: ["0 . (  + G  M  ", "  & M 0 / > ( . ? 6 ( ", "* 0 . > # A * 0 @  M 7 # ", " 8 0 K  @ 8 M % > * ( > "], answer: "A" } ] } }; // Add remaining placeholder topics to ensure all 23 chapters exist const allTopics = [ "8 > . > ( M / 5 ?  M  > ( ", "- > 0 $ @ /  $ ? 9 > 8 ", "- > 0 $ @ / 8  5 ? ' > (  5  0 >  5 M / 5 8 M % > ", "- > 0 $ @ /  0 M % 5 M / 5 8 M % > ", "- > 0 $ @ / 8  8 M  C $ ?  5  5 ? 0 > 8 $ ", "- > 0 $ @ /  C 7 ?  5  5 M / > * > 0 ", " ( 8   M / > , * 0 M / > 5 0 #  0 6 9 0 @  0 # ", "- > 0 $ @ /  5  5 ? 6 M 5 - B  K 2 , * M 0 >  C $ ?  8  8 > ' ( ", " $ M $ 0 * M 0 & G 6 0 >  M /  @ 6 ?  M 7 > , 8  8 M  C $ ?  0 8 > . >  ?  * M 0 % >   ", " $ M $ 0 * M 0 & G 6 . G  0 >  8 M 5 , * A 2 ? 8  0 8 > . > ( M / * M 0 6 > 8 ( ?  5 M / 5 8 M % > ", ". > ( 5 > ' ?  > 0 ", "5 ? . A & M 0 @  0 #  0 8  > * M 0 - > 5 ", "5 8 M $ A  5  8 G 5 >  0 (GST)", "* A 0 8 M  > 0  0 8 . M . > ( ", "& G 6 /0 >  ' > ( ? / >  /. A & M 0 >   ", ". 9 $ M 5 * B 0 M # & ? (  5  $ ? % ? / >  ", " K  G   5   ( A 8  ' > ( ", "* M 0 8 ? & M ' * A 8 M $  G   5  (  G 2 G   ", "  $ 0 ?  8 A 0  M 7 >  0  $   5 > & ", "- > 0 $  5  * ! < K 8 @ & G 6 K   G 8  ,  ' ", "0 > 7 M  M 0 @ /  5    $ 0 M 0 > 7 M  M 0 @ / 8 . 8 > . / ?  5 ? 7 / ", "0 > 7 M  M 0 @ /  5    $ 0 M 0 > 7 M  M 0 @ / 8   ( ", "8 >  , 0  * 0 > '  5  8 K 6 2 . @ ! ? / > 8   > 0 " ]; // Fill missing topics with default questions allTopics.forEach(topic => { if (!questions[topic]) { questions[topic] = { level1: [{ question: `${topic}  G 8  ,  ' . G  , A ( ? / > & @  > (  > 0 @ : ( ? . M ( . G   L ( 8 9 @ 9 H ?`, options: ["5 ?  2 M * A", "5 ?  2 M * B", "5 ?  2 M * C", "5 ?  2 M * D"], answer: "A" }], level2: [{ question: `${topic}  > . ' M / . 8 M $ 0 @ / * M 0 6 M ( : 8 9 @  % (  A ( G  `, options: ["A", "B", "C", "D"], answer: "B" }], level3: [{ question: `${topic}  > ( M ( $ * M 0 6 M ( : 8 9 @ 5 ?  2 M *  >  / (  0 G  `, options: ["A", "B", "C", "D"], answer: "C" }] }; } }); // DOM Elements const startContainer = document.getElementById('startContainer'); const startScreen = document.getElementById('startScreen'); const subjectSelection = document.getElementById('subjectSelection'); const chapterSelection = document.getElementById('chapterSelection'); const levelSelection = document.getElementById('levelSelection'); const generatedPaperContainer = document.getElementById('generatedPaperContainer'); const startGeneratingBtn = document.getElementById('startGeneratingBtn'); const selectGKBtn = document.getElementById('selectGKBtn'); const backToStartBtn = document.getElementById('backToStartBtn'); const generateAssignmentBtn = document.getElementById('generateAssignmentBtn'); const backToChaptersBtn = document.getElementById('backToChaptersBtn'); const generateFinalBtn = document.getElementById('generateFinalBtn'); const level1Btn = document.getElementById('level1Btn'); const level2Btn = document.getElementById('level2Btn'); const level3Btn = document.getElementById('level3Btn'); let selectedChapters = []; let selectedLevel = null; // Populate chapter checkboxes dynamically function populateChapters() { const container = document.getElementById('chapterCheckboxContainer'); container.innerHTML = `<div class="checkbox-item"><input type="checkbox" id="fullPaper" value="Full Paper"><label for="fullPaper">* B 0 M # * > M /  M 0 . (8 - @ 23 5 ? 7 / )</label></div>`; allTopics.forEach((topic, idx) => { container.innerHTML += `<div class="checkbox-item"><input type="checkbox" id="topic_${idx}" name="chapter" value="${topic}"><label for="topic_${idx}">${idx+1}. ${topic}</label></div>`; }); document.getElementById('fullPaper').addEventListener('change', function() { document.querySelectorAll('input[name="chapter"]').forEach(cb => cb.disabled = this.checked); }); } function getRandomQuestions(chapters, level, count) { let allQuestions = []; chapters.forEach(ch => { if(questions[ch] && questions[ch][`level${level}`]) { allQuestions = allQuestions.concat(questions[ch][`level${level}`]); } }); allQuestions = allQuestions.sort(() => Math.random() - 0.5); return allQuestions.slice(0, count); } startGeneratingBtn.addEventListener('click', () => { startScreen.classList.add('hidden'); subjectSelection.classList.remove('hidden'); }); selectGKBtn.addEventListener('click', () => { subjectSelection.classList.add('hidden'); populateChapters(); chapterSelection.classList.remove('hidden'); }); backToStartBtn.addEventListener('click', () => { generatedPaperContainer.classList.add('hidden'); startContainer.classList.remove('hidden'); chapterSelection.classList.add('hidden'); levelSelection.classList.add('hidden'); startScreen.classList.remove('hidden'); }); generateAssignmentBtn.addEventListener('click', () => { const fullPaper = document.getElementById('fullPaper'); if(fullPaper && fullPaper.checked) { selectedChapters = [...allTopics]; } else { selectedChapters = Array.from(document.querySelectorAll('input[name="chapter"]:checked')).map(cb => cb.value); } if(selectedChapters.length === 0) { alert(" C * / >  . 8 G  .    ' M / > / /5 ? 7 /  A ( G  !"); return; } chapterSelection.classList.add('hidden'); levelSelection.classList.remove('hidden'); }); backToChaptersBtn.addEventListener('click', () => { levelSelection.classList.add('hidden'); chapterSelection.classList.remove('hidden'); }); function selectLevel(level) { level1Btn.classList.remove('selected'); level2Btn.classList.remove('selected'); level3Btn.classList.remove('selected'); document.getElementById(`level${level}Btn`).classList.add('selected'); selectedLevel = level; } level1Btn.addEventListener('click', () => selectLevel(1)); level2Btn.addEventListener('click', () => selectLevel(2)); level3Btn.addEventListener('click', () => selectLevel(3)); generateFinalBtn.addEventListener('click', () => { if(!selectedLevel) { alert(" C * / >  ? ( >  8 M $ 0  A ( G  !"); return; } startContainer.classList.add('hidden'); levelSelection.classList.add('hidden'); generatedPaperContainer.classList.remove('hidden'); generatedPaperContainer.innerHTML = ''; const mcqs = getRandomQuestions(selectedChapters, selectedLevel, 45); let questionNumber = 1; let paperContent = ` <div class="header"> <h2>UP * A 2 ? 8  >  8 M  G , 2 - 8 > . > ( M /  M  > (  8 >  ( . G   </h2> <h3>${selectedChapters.length === allTopics.length ? "* B 0 M # * > M /  M 0 . (23 5 ? 7 / )" : selectedChapters.slice(0,3).join(", ")+ (selectedChapters.length>3?"...":"")}</h3> <p>8 M $ 0 ${selectedLevel} - ${selectedLevel === 1 ? ", G 8 ?  " : selectedLevel === 2 ? ". ' M / . " : "* 0 @  M 7 > 8 M $ 0 "}</p> </div> <div class="content-area"> <div class="instructions"> <p><strong>( ? 0 M & G 6 :</strong></p> <ol><li> 8  8 >  ( . G   . G  45 , 9 A 5 ?  2 M * @ / * M 0 6 M ( (MCQs) 9 H  d </li><li>* M 0 $ M / G  * M 0 6 M (  G  > 0 5 ?  2 M * 9 H  ,  G 5 2   8 9 @ 9 H d </li><li>  ? $ 5 ?  2 M *  >  / (  0 G  d </li><li>8 . / : 60 . ? (  </li></ol> </div> <div class="question-section"><div class="section-heading">, 9 A 5 ?  2 M * @ / * M 0 6 M ( (MCQs)</div>`; mcqs.forEach(mcq => { paperContent += `<div class="question"><div class="question-text">${questionNumber}. ${mcq.question}</div><div class="option">A. ${mcq.options[0]}</div><div class="option">B. ${mcq.options[1]}</div><div class="option">C. ${mcq.options[2]}</div><div class="option">D. ${mcq.options[3]}</div></div>`; questionNumber++; }); paperContent += `</div><div class="answer-sheet"><h3 class="section-title"> $ M $ 0  A   @ (Answer Key)</h3><table class="answer-table"><thead><tr><th>* M 0 6 M ( 8  .</th><th> $ M $ 0 </th><th>* M 0 6 M ( 8  .</th><th> $ M $ 0 </th><th>* M 0 6 M ( 8  .</th><th> $ M $ 0 </th></tr></thead><tbody>`; for(let i=0; i<mcqs.length; i+=3) { paperContent += `<tr>`; for(let j=0; j<3; j++) { if(i+j < mcqs.length) paperContent += `<td>${i+j+1}</td><td>${mcqs[i+j].answer}</td>`; else paperContent += `<td></td><td></td>`; } paperContent += `</tr>`; } paperContent += `</tbody></table></div><div class="action-buttons"><button class="btn btn-primary" id="printBtn"><i class="fas fa-print"></i> * M 0 ?    0 G  </button><button class="btn btn-success" id="downloadBtn"><i class="fas fa-download"></i> PDF ! > ( 2 K !  0 G  </button><button class="btn btn-danger" id="newAssignmentBtn"><i class="fas fa-plus"></i> ( / >  8 >  ( . G   </button></div></div>`; generatedPaperContainer.innerHTML = paperContent; document.getElementById('printBtn').addEventListener('click', () => window.print()); document.getElementById('downloadBtn').addEventListener('click', downloadPDF); document.getElementById('newAssignmentBtn').addEventListener('click', () => { generatedPaperContainer.classList.add('hidden'); startContainer.classList.remove('hidden'); startScreen.classList.remove('hidden'); subjectSelection.classList.add('hidden'); chapterSelection.classList.add('hidden'); levelSelection.classList.add('hidden'); }); }); async function downloadPDF() { const element = document.getElementById('generatedPaperContainer'); const tempDiv = document.createElement('div'); tempDiv.style.position = 'absolute'; tempDiv.style.left = '-9999px'; tempDiv.style.width = '794px'; tempDiv.style.backgroundColor = 'white'; tempDiv.style.padding = '20px'; tempDiv.innerHTML = element.innerHTML; document.body.appendChild(tempDiv); try { const pdf = new jsPDF('p', 'mm', 'a4'); const pageWidth = pdf.internal.pageSize.getWidth() - 25.4; const pageHeight = pdf.internal.pageSize.getHeight() - 25.4; let position = 12.7; let remainingHeight = tempDiv.scrollHeight; let pageNum = 1; while(remainingHeight > 0) { const canvas = await html2canvas(tempDiv, { scale: 1.5, windowHeight: pageHeight * 3.78, windowWidth: pageWidth * 3.78, y: position * 3.78, height: pageHeight * 3.78, useCORS: true, backgroundColor: '#ffffff', logging: false }); const imgData = canvas.toDataURL('image/jpeg', 0.92); if(pageNum > 1) pdf.addPage('a4', 'portrait'); pdf.addImage(imgData, 'JPEG', 12.7, 12.7, pageWidth, canvas.height * pageWidth / canvas.width); position += pageHeight; remainingHeight -= pageHeight * 3.78; pageNum++; } pdf.save('UP_Police_GK_Assignment.pdf'); } catch(err) { console.error(err); alert('PDF  ( 0 G 6 ( . G  $ M 0 A  ? d '); } finally { if(tempDiv) document.body.removeChild(tempDiv); } } </script> </body> </html>