ÿþ<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>CTET Paper 2 - English Language & Pedagogy Practice Set Generator</title> <link href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Ccircle cx='50' cy='50' r='45' fill='%23007bff'/%3E%3Ctext x='50' y='67' font-size='40' text-anchor='middle' fill='white' font-weight='bold'%3EEN%3C/text%3E%3C/svg%3E" 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: #007bff; --primary-dark: #0056b3; --secondary: #6c757d; --danger: #dc3545; --success: #28a745; --light: #e8f0fe; --dark: #1a1a2e; --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', 'Noto Sans', system-ui, -apple-system, sans-serif; } body { background: linear-gradient(135deg, #e3f2fd 0%, #bbdefb 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: 1000px; 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; bottom: -30px; right: -30px; font-size: 120px; opacity: 0.15; transform: rotate(-15deg); } .header h1 { font-size: 1.6rem; margin-bottom: 10px; font-weight: 700; position: relative; z-index: 1; } .header p { font-size: 1rem; opacity: 0.9; position: relative; z-index: 1; } .header-controls { position: absolute; top: 20px; right: 20px; display: flex; gap: 12px; z-index: 5; } .header-controls .home-icon { position: relative; top: 0; left: 0; color: white; font-size: 24px; cursor: pointer; transition: var(--transition); text-decoration: none; display: inline-block; } .header-controls .home-icon:hover { transform: scale(1.1); color: rgba(255, 255, 255, 0.8); } .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(0, 123, 255, 0.3); } .btn-success { background: var(--success); color: white; } .btn-success:hover { background: #1e7e34; transform: translateY(-2px); } .btn-danger { background: var(--danger); color: white; } .btn-danger:hover { background: #bd2130; transform: translateY(-2px); } .btn-level { background: var(--light); color: var(--dark); border: 2px solid var(--secondary); font-size: 1.1rem; 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; flex-wrap: wrap; } .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(--primary); border-radius: 3px; } .checkbox-container { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 12px; margin: 25px 0; max-height: 450px; overflow-y: auto; padding: 10px; border: 1px solid #eee; border-radius: 12px; } .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.85rem; } .practice-options { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 20px; margin: 30px 0; } .option-card { background: white; border-radius: var(--border-radius); padding: 25px; box-shadow: var(--box-shadow); text-align: center; transition: var(--transition); cursor: pointer; border: 2px solid transparent; } .option-card:hover { transform: translateY(-5px); box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15); } .option-card.selected { border-color: var(--primary); background: rgba(0, 123, 255, 0.05); } .option-icon { font-size: 2.5rem; color: var(--primary); margin-bottom: 15px; } .option-title { font-size: 1.2rem; font-weight: 600; margin-bottom: 10px; color: var(--primary-dark); } .option-description { color: var(--gray); font-size: 0.85rem; } .question-count-selector { display: flex; justify-content: center; align-items: center; gap: 15px; margin: 20px 0; } .count-btn { width: 40px; height: 40px; border-radius: 50%; background: var(--light); border: 2px solid var(--secondary); display: flex; align-items: center; justify-content: center; cursor: pointer; font-weight: bold; transition: var(--transition); } .count-btn:hover { background: var(--primary); color: white; border-color: var(--primary); } .question-count { font-size: 1.5rem; font-weight: 600; min-width: 60px; text-align: center; } .timer-options { display: flex; justify-content: center; gap: 15px; margin: 20px 0; flex-wrap: wrap; } .timer-btn { padding: 10px 20px; background: var(--light); border: 2px solid var(--secondary); border-radius: 30px; cursor: pointer; transition: var(--transition); } .timer-btn.selected { background: var(--primary); color: white; border-color: var(--primary); } .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; } .instructions { margin-bottom: 30px; padding: 20px; background: #e8f0fe; border-radius: var(--border-radius); border-left: 5px solid var(--primary); } .instructions ol { padding-left: 20px; margin-top: 10px; } .paper-header { text-align: center; margin-bottom: 20px; } .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); } @media (max-width: 768px) { .checkbox-container { grid-template-columns: 1fr; } .level-buttons { flex-direction: column; align-items: center; } .btn-level { width: 100%; max-width: 250px; } .header h1 { font-size: 1.2rem; } .header-controls { top: 12px; right: 12px; gap: 8px; } } @media print { .action-buttons { display: none; } .home-icon { display: none; } .header-controls { display: none; } .question { page-break-inside: avoid; } } .text-center { text-align: center; } </style> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4930137336556867" crossorigin="anonymous"></script> <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"> <div class="header-controls"> <a href="ctet-exam-paper2-practice-set-generator.html" class="home-icon" ><i class="fas fa-home"></i></a> </div> <br /> <h1 id="mainTitle"><i class="fas fa-language"></i> CTET Paper 2 - English Language & Pedagogy Practice Set Generator</h1> <p id="mainSubtitle">Topic-wise practice for English Language, Grammar, Literature & Pedagogy for CTET Paper 2 (Upper Primary Level)</p> </div> <div class="content-area"> <div id="startScreen"> <h2 class="section-title" id="startTitle">=ØÝÜ English Language & Pedagogy - Practice Set Generator</h2> <p class="text-center" id="startDesc">Create comprehensive practice sets for CTET Paper 2 covering English Language, Grammar, Literature, and Pedagogy</p> <div class="btn-group"> <button class="btn btn-primary" id="startGeneratingBtn"><i class="fas fa-play"></i> <span id="startBtnText">Start Creating Practice Set</span></button> </div> </div> <div id="practiceTypeSelection" class="hidden"> <h2 class="section-title" id="practiceTypeTitle">Select Practice Type</h2> <p class="text-center" id="practiceTypeDesc">Choose practice set according to your preparation:</p> <div class="practice-options"> <div class="option-card" data-type="chapter-wise"> <div class="option-icon"><i class="fas fa-book-open"></i></div> <div class="option-title" id="optChapterTitle">Chapter-wise Practice</div> <div class="option-description" id="optChapterDesc">Deep practice of a specific topic</div> </div> <div class="option-card" data-type="full-length"> <div class="option-icon"><i class="fas fa-file-alt"></i></div> <div class="option-title" id="optFullTitle">Full Length Test</div> <div class="option-description" id="optFullDesc">50 question set based on CTET pattern</div> </div> <div class="option-card" data-type="previous-year"> <div class="option-icon"><i class="fas fa-calendar-alt"></i></div> <div class="option-title" id="optPrevTitle">Previous Year Questions</div> <div class="option-description" id="optPrevDesc">Questions based on previous TET exams</div> </div> </div> <div class="btn-group"> <button class="btn btn-danger" id="backToStartBtn"><span id="backStartBtnText">Back</span></button> <button class="btn btn-success" id="proceedToChaptersBtn"><span id="proceedBtnText">Select Topics ’!</span></button> </div> </div> <div id="chapterSelection" class="hidden"> <h2 class="section-title" id="chapterTitle">=ØÚÜ English Language & Pedagogy - Select Topics</h2> <form id="chapterForm"> <div class="checkbox-container" id="engTopicsContainer"></div> </form> <div id="questionCountSection"> <h3 class="section-title" id="qCountTitle">Select Number of Questions</h3> <div class="question-count-selector"> <div class="count-btn" id="decreaseCount">-</div> <div class="question-count" id="questionCount">50</div> <div class="count-btn" id="increaseCount">+</div> </div> </div> <div class="btn-group"> <button class="btn btn-danger" id="backToPracticeTypeBtn"><span id="backPracticeBtnText">Back</span></button> <button class="btn btn-success" id="generateAssignmentBtn"><span id="generateAssignBtnText">Select Difficulty ’!</span></button> </div> </div> <div id="levelSelection" class="hidden"> <h2 class="section-title" id="levelTitle">Select Difficulty Level</h2> <p class="text-center" id="levelDesc">Choose level according to CTET Paper 2 exam:</p> <div class="level-buttons"> <button class="btn btn-level" id="level1Btn"><span id="l1Title">Level 1</span><br><small id="l1Sub">Basic (Introductory)</small></button> <button class="btn btn-level" id="level2Btn"><span id="l2Title">Level 2</span><br><small id="l2Sub">Medium (CTET Level)</small></button> <button class="btn btn-level" id="level3Btn"><span id="l3Title">Level 3</span><br><small id="l3Sub">Advanced (Teacher Eligibility)</small></button> </div> <div id="timerOptions"> <h3 class="section-title" id="timerTitle">Select Time Limit</h3> <div class="timer-options"> <div class="timer-btn" data-time="30"><span id="t30">30 min</span></div> <div class="timer-btn" data-time="45"><span id="t45">45 min</span></div> <div class="timer-btn" data-time="60" class="selected"><span id="t60">60 min</span></div> <div class="timer-btn" data-time="90"><span id="t90">90 min</span></div> </div> </div> <div class="btn-group"> <button class="btn btn-danger" id="backToChaptersBtn"><span id="backChaptersBtnText">Back to Topics</span></button> <button class="btn btn-success" id="generateFinalBtn"><span id="generateFinalBtnText">Generate Practice Set</span></button> </div> </div> </div> </div> <div class="container hidden" id="generatedPaperContainer"></div> <script> const { jsPDF } = window.jspdf; // ===================================================== // ENGLISH LANGUAGE & PEDAGOGY QUESTION BANK (28 TOPICS) - CTET Paper 2 // ===================================================== const questionBank = {}; function addQuestions(topicKey, questions) { if (!questionBank[topicKey]) questionBank[topicKey] = { level1: [], level2: [], level3: [] }; const levels = ['level1', 'level2', 'level3']; questions.forEach((q, idx) => { const levelKey = levels[idx % 3]; questionBank[topicKey][levelKey].push(q); }); } // ----- ENGLISH LANGUAGE TOPICS (1-18) ----- addQuestions('Reading Comprehension', [ { question: "Reading comprehension primarily tests the ability to:", options: ["Understand and interpret text", "Memorize facts", "Write summaries", "Identify parts of speech"], answer: "A" }, { question: "The main idea of a passage is usually found in:", options: ["The introductory paragraph", "The conclusion", "The middle", "Anywhere"], answer: "A" }, { question: "Inference in reading comprehension means:", options: ["Drawing conclusions from clues", "Reading quickly", "Finding synonyms", "Counting words"], answer: "A" } ]); addQuestions('The Sentence', [ { question: "A sentence must contain:", options: ["A subject and a predicate", "A verb only", "A noun only", "A conjunction"], answer: "A" }, { question: "Which is a declarative sentence?", options: ["I am going.", "Where are you?", "Please sit down.", "What a day!"], answer: "A" }, { question: "An imperative sentence expresses:", options: ["A command or request", "A question", "A strong feeling", "A statement"], answer: "A" } ]); addQuestions('The Phrase & The Clause', [ { question: "A phrase is a group of words that:", options: ["Does not contain a finite verb", "Contains a finite verb", "Contains a subject and predicate", "Is always a sentence"], answer: "A" }, { question: "A clause contains:", options: ["A subject and a verb", "Only a verb", "Only a subject", "No verb"], answer: "A" }, { question: "Which is an independent clause?", options: ["She went home.", "Because she was tired", "After the rain", "When I saw him"], answer: "A" } ]); addQuestions('The Noun : Kinds of Nouns, Number & Gender', [ { question: "A proper noun is:", options: ["A specific name", "A common name", "An action word", "A describing word"], answer: "A" }, { question: "The plural of 'child' is:", options: ["Children", "Childs", "Childrens", "Childes"], answer: "A" }, { question: "The feminine gender of 'actor' is:", options: ["Actress", "Actoress", "Actorine", "Actresss"], answer: "A" } ]); addQuestions('The Pronoun', [ { question: "A pronoun is used in place of:", options: ["A noun", "A verb", "An adjective", "An adverb"], answer: "A" }, { question: "Which is a personal pronoun?", options: ["He", "Who", "Which", "That"], answer: "A" }, { question: "The reflexive pronoun of 'they' is:", options: ["Themselves", "Themself", "Theirselves", "Theirself"], answer: "A" } ]); addQuestions('The Adjective', [ { question: "An adjective modifies a:", options: ["Noun or pronoun", "Verb", "Adverb", "Preposition"], answer: "A" }, { question: "Which is an adjective?", options: ["Beautiful", "Quickly", "Run", "And"], answer: "A" }, { question: "The comparative degree of 'good' is:", options: ["Better", "Best", "More good", "Gooder"], answer: "A" } ]); addQuestions('The Verb', [ { question: "A verb expresses:", options: ["An action or state", "A name", "A quality", "A relation"], answer: "A" }, { question: "Which is a transitive verb?", options: ["Carry", "Sleep", "Go", "Arrive"], answer: "A" }, { question: "The past participle of 'write' is:", options: ["Written", "Wrote", "Writing", "Writes"], answer: "A" } ]); addQuestions('Modals', [ { question: "Modal verbs are used to:", options: ["Express possibility, necessity, etc.", "Express action", "Describe nouns", "Join sentences"], answer: "A" }, { question: "Which is a modal verb?", options: ["Can", "Run", "Eat", "Sleep"], answer: "A" }, { question: "'May' is used to express:", options: ["Possibility and permission", "Compulsion", "Ability", "Certainty"], answer: "A" } ]); addQuestions('The Adverb', [ { question: "An adverb modifies a:", options: ["Verb, adjective, or another adverb", "Noun", "Pronoun", "Preposition"], answer: "A" }, { question: "Which is an adverb?", options: ["Quickly", "Quick", "Better", "Good"], answer: "A" }, { question: "The adverb in 'She spoke softly' is:", options: ["Softly", "Spoke", "She", "The"], answer: "A" } ]); addQuestions('The Preposition', [ { question: "A preposition shows the relationship between:", options: ["A noun and another word", "A verb and a noun", "Two verbs", "Two adjectives"], answer: "A" }, { question: "Which is a preposition?", options: ["In", "And", "But", "Very"], answer: "A" }, { question: "The preposition in 'The book is on the table' is:", options: ["On", "The", "Is", "Book"], answer: "A" } ]); addQuestions('The Conjunction', [ { question: "A conjunction is used to:", options: ["Join words, phrases, or clauses", "Describe nouns", "Show action", "Express emotion"], answer: "A" }, { question: "Which is a coordinating conjunction?", options: ["And", "Because", "Since", "Unless"], answer: "A" }, { question: "'Although' is a:", options: ["Subordinating conjunction", "Coordinating conjunction", "Preposition", "Adverb"], answer: "A" } ]); addQuestions('The Interjection', [ { question: "An interjection expresses:", options: ["Strong emotion", "Action", "Description", "Relation"], answer: "A" }, { question: "Which is an interjection?", options: ["Wow!", "Run", "Beautiful", "Slowly"], answer: "A" }, { question: "Interjections are usually followed by:", options: ["An exclamation mark", "A full stop", "A comma", "A semicolon"], answer: "A" } ]); addQuestions('Tense', [ { question: "The present perfect tense uses:", options: ["Has/have + past participle", "Was/were + -ing", "Will/shall + verb", "Verb + -ing"], answer: "A" }, { question: "'I had gone' is which tense?", options: ["Past perfect", "Present perfect", "Past continuous", "Simple past"], answer: "A" }, { question: "The future continuous tense is formed with:", options: ["Will be + -ing", "Will have + past participle", "Is/am/are + -ing", "Has/have + been + -ing"], answer: "A" } ]); addQuestions('Synonyms', [ { question: "Synonyms are words with:", options: ["Similar meanings", "Opposite meanings", "Same spelling", "Same pronunciation"], answer: "A" }, { question: "A synonym of 'big' is:", options: ["Large", "Small", "Tiny", "Narrow"], answer: "A" }, { question: "A synonym of 'happy' is:", options: ["Joyful", "Sad", "Angry", "Tired"], answer: "A" } ]); addQuestions('Antonyms', [ { question: "Antonyms are words with:", options: ["Opposite meanings", "Similar meanings", "Same spelling", "Same pronunciation"], answer: "A" }, { question: "The antonym of 'hot' is:", options: ["Cold", "Warm", "Boiling", "Freezing"], answer: "A" }, { question: "The antonym of 'victory' is:", options: ["Defeat", "Win", "Success", "Triumph"], answer: "A" } ]); addQuestions('One Word Substitution', [ { question: "One who cannot be corrected is:", options: ["Incorrigible", "Invincible", "Inevitable", "Infallible"], answer: "A" }, { question: "A person who loves books is a:", options: ["Bibliophile", "Philanthropist", "Misanthrope", "Chauvinist"], answer: "A" }, { question: "A speech by a single person is:", options: ["Monologue", "Dialogue", "Soliloquy", "Eulogy"], answer: "A" } ]); addQuestions('Idioms & Phrases', [ { question: "The idiom 'once in a blue moon' means:", options: ["Rarely", "Always", "Never", "Frequently"], answer: "A" }, { question: "'A piece of cake' means:", options: ["Easy", "Difficult", "Expensive", "Tasty"], answer: "A" }, { question: "'To spill the beans' means:", options: ["Reveal a secret", "Make a mistake", "Tell a lie", "Start a fight"], answer: "A" } ]); addQuestions('Figures of Speech', [ { question: "A simile uses:", options: ["Like or as", "Is or was", "And or but", "Because or since"], answer: "A" }, { question: "'Life is a journey' is an example of:", options: ["Metaphor", "Simile", "Personification", "Hyperbole"], answer: "A" }, { question: "Personification gives human qualities to:", options: ["Non-human things", "Animals only", "People only", "Plants only"], answer: "A" } ]); // ----- PEDAGOGY TOPICS (19-28) - Updated as per user request ----- addQuestions('Learning And Acquisition ( - ?  .  5   0 M  ( )', [ { question: "Learning is a:", options: ["Conscious process", "Subconscious process", "Random process", "One-time event"], answer: "A" }, { question: "Acquisition of language occurs through:", options: ["Exposure and use", "Formal instruction", "Grammar rules", "Translation"], answer: "A" }, { question: "The difference between learning and acquisition is:", options: ["Learning is conscious, acquisition is subconscious", "Both are the same", "Learning is for children only", "Acquisition is for adults only"], answer: "A" } ]); addQuestions('Principle, Methods And Approaches of Teaching English (   M 0 G  @ 6 ?  M 7 #  G 8 ? & M ' >  $ , 5 ? - ? ( M ( K   0 & C 7 M  ?  K # )', [ { question: "The communicative approach focuses on:", options: ["Interaction and communication", "Grammar rules", "Translation", "Reading only"], answer: "A" }, { question: "The direct method of teaching uses:", options: ["Target language only", "Translation", "Grammar rules", "Memorization"], answer: "A" }, { question: "The principle of 'learning by doing' is emphasized in:", options: ["Activity-based learning", "Grammar translation", "Rote learning", "Lecture method"], answer: "A" } ]); addQuestions('Role of Listening and Speaking; Functions of Language (8 A ( ( G  0 , K 2 ( G  @ - B . ?  > : - > 7 >  G  > 0 M / )', [ { question: "Listening is a:", options: ["Receptive skill", "Productive skill", "Reading skill", "Writing skill"], answer: "A" }, { question: "Speaking is a:", options: ["Productive skill", "Receptive skill", "Reading skill", "Listening skill"], answer: "A" }, { question: "The expressive function of language is to:", options: ["Express emotions", "Convey facts", "Ask questions", "Give commands"], answer: "A" } ]); addQuestions('Role of Grammar in Learning a Language ( ? 8 @ - > 7 >  K 8 @  ( G . G  5 M / >  0 #  @ - B . ?  > )', [ { question: "Grammar is important in language learning for:", options: ["Structuring sentences", "Only writing", "Only speaking", "Only reading"], answer: "A" }, { question: "Which approach emphasizes grammar rules?", options: ["Formal approach", "Communicative approach", "Natural approach", "Direct method"], answer: "A" }, { question: "Grammar is best learned through:", options: ["Context and usage", "Rote memorization", "Translation", "Isolation"], answer: "A" } ]); addQuestions('Challenges of Teaching Language in a Diverse Classroom (5 ? 5 ? '   M 7 > . G  - > 7 > 6 ?  M 7 #  @  A ( L $ ? / >  )', [ { question: "In a diverse classroom, the teacher must:", options: ["Address individual differences", "Use one method for all", "Ignore differences", "Separate students"], answer: "A" }, { question: "Multilingual classrooms require:", options: ["Inclusive teaching strategies", "Single-language approach", "Translation-based teaching", "Only English instruction"], answer: "A" }, { question: "A challenge in diverse classrooms is:", options: ["Varying proficiency levels", "Same proficiency levels", "Lack of students", "Too many resources"], answer: "A" } ]); addQuestions('Language Skills (- > 7 >  K 6 2 )', [ { question: "The four language skills are:", options: ["L,S,R,W", "L,R,W,S", "R,W,S,L", "W,S,L,R"], answer: "A" }, { question: "Which is a receptive skill?", options: ["Reading", "Speaking", "Writing", "Reading and listening"], answer: "D" }, { question: "Which is a productive skill?", options: ["Speaking and writing", "Listening and reading", "Speaking only", "Writing only"], answer: "A" } ]); addQuestions('Evaluating Language Comprehension and Proficiency (- > 7 >  @ 8 .   0 &  M 7 $ >  > . B 2 M / >   ( )', [ { question: "Evaluation of language proficiency should be:", options: ["Continuous and comprehensive", "Only at the end", "Only oral", "Only written"], answer: "A" }, { question: "Formative assessment in language is:", options: ["During the learning process", "At the end of the year", "Only for grading", "Only for punishment"], answer: "A" }, { question: "Summative assessment aims to:", options: ["Evaluate overall achievement", "Improve learning", "Diagnose difficulties", "Plan instruction"], answer: "A" } ]); addQuestions('Teaching Learning Material (6 ?  M 7 #  - ?  . 8 > .  M 0 @ )', [ { question: "Teaching learning materials in language include:", options: ["Textbooks, audio-visual aids, realia", "Only textbooks", "Only workbooks", "Only charts"], answer: "A" }, { question: "Authentic materials in language teaching are:", options: ["Real-world texts and resources", "Textbooks only", "Grammar books only", "Workbooks only"], answer: "A" }, { question: "The use of technology in language teaching:", options: ["Enhances learning and engagement", "Replaces the teacher", "Is unnecessary", "Confuses students"], answer: "A" } ]); addQuestions('Remedial Teaching ( *  > 0 > $ M .  6 ?  M 7 # )', [ { question: "Remedial teaching is intended for:", options: ["Students with learning difficulties", "High achievers", "Average students", "All students"], answer: "A" }, { question: "The aim of remedial teaching is to:", options: ["Correct errors and build skills", "Accelerate learning", "Test knowledge", "Assign grades"], answer: "A" }, { question: "Remedial teaching should be:", options: ["Individualized and specific", "General and broad", "Rote-based", "Translation-based"], answer: "A" } ]); addQuestions('Teaching English in Bilingual/Multilingual (9 ?  8 > - > 7 @ /, 9 A - > 7 @ 8  & 0 M - . G     M 0 G  @ 6 ?  M 7 # )', [ { question: "In a multilingual classroom, English teaching should:", options: ["Use students' mother tongue as a resource", "Avoid mother tongue", "Use only English", "Use translation only"], answer: "A" }, { question: "Bilingual education involves:", options: ["Two languages of instruction", "Only one language", "Three languages", "No language"], answer: "A" }, { question: "Code-switching in bilingual classrooms:", options: ["Is a natural phenomenon", "Should be avoided", "Is a sign of confusion", "Is not allowed"], answer: "A" } ]); // Topic keys (28 topics) - Updated as per user request const topicKeys = [ // English Language (1-18) "Reading Comprehension", "The Sentence", "The Phrase & The Clause", "The Noun : Kinds of Nouns, Number & Gender", "The Pronoun", "The Adjective", "The Verb", "Modals", "The Adverb", "The Preposition", "The Conjunction", "The Interjection", "Tense", "Synonyms", "Antonyms", "One Word Substitution", "Idioms & Phrases", "Figures of Speech", // Pedagogy (19-28) "Learning And Acquisition ( - ?  .  5   0 M  ( )", "Principle, Methods And Approaches of Teaching English (   M 0 G  @ 6 ?  M 7 #  G 8 ? & M ' >  $ , 5 ? - ? ( M ( K   0 & C 7 M  ?  K # )", "Role of Listening and Speaking; Functions of Language (8 A ( ( G  0 , K 2 ( G  @ - B . ?  > : - > 7 >  G  > 0 M / )", "Role of Grammar in Learning a Language ( ? 8 @ - > 7 >  K 8 @  ( G . G  5 M / >  0 #  @ - B . ?  > )", "Challenges of Teaching Language in a Diverse Classroom (5 ? 5 ? '   M 7 > . G  - > 7 > 6 ?  M 7 #  @  A ( L $ ? / >  )", "Language Skills (- > 7 >  K 6 2 )", "Evaluating Language Comprehension and Proficiency (- > 7 >  @ 8 .   0 &  M 7 $ >  > . B 2 M / >   ( )", "Teaching Learning Material (6 ?  M 7 #  - ?  . 8 > .  M 0 @ )", "Remedial Teaching ( *  > 0 > $ M .  6 ?  M 7 # )", "Teaching English in Bilingual/Multilingual (9 ?  8 > - > 7 @ /, 9 A - > 7 @ 8  & 0 M - . G     M 0 G  @ 6 ?  M 7 # )" ]; // ===================================================== // UI TEXT (All in English) // ===================================================== const uiText = { en: { mainTitle: "=ØÝÜ CTET Paper 2 - English Language & Pedagogy Practice Set Generator", mainSubtitle: "Topic-wise practice for English Language, Grammar, Literature & Pedagogy for CTET Paper 2 (Upper Primary Level)", startTitle: "=ØÝÜ English Language & Pedagogy - Practice Set Generator", startDesc: "Create comprehensive practice sets for CTET Paper 2 covering English Language, Grammar, Literature, and Pedagogy", startBtn: "Start Creating Practice Set", practiceTypeTitle: "Select Practice Type", practiceTypeDesc: "Choose practice set according to your preparation:", optChapterTitle: "Chapter-wise Practice", optChapterDesc: "Deep practice of a specific topic", optFullTitle: "Full Length Test", optFullDesc: "50 question set based on CTET pattern", optPrevTitle: "Previous Year Questions", optPrevDesc: "Questions based on previous TET exams", backStartBtn: "Back", proceedBtn: "Select Topics ’!", chapterTitle: "=ØÚÜ English Language & Pedagogy - Select Topics", qCountTitle: "Select Number of Questions", backPracticeBtn: "Back", generateAssignBtn: "Select Difficulty ’!", levelTitle: "Select Difficulty Level", levelDesc: "Choose level according to CTET Paper 2 exam:", l1Title: "Level 1", l1Sub: "Basic (Introductory)", l2Title: "Level 2", l2Sub: "Medium (CTET Level)", l3Title: "Level 3", l3Sub: "Advanced (Teacher Eligibility)", timerTitle: "Select Time Limit", t30: "30 min", t45: "45 min", t60: "60 min", t90: "90 min", backChaptersBtn: "Back to Topics", generateFinalBtn: "Generate Practice Set", fullPaper: "All Topics (Full Syllabus - 28 Chapters)", noTopicAlert: "Please select at least one topic!", noLevelAlert: "Please select a difficulty level!", noPracticeAlert: "Please select a practice type!", instructions: "=ØÌÜ Instructions:", inst1: "This set has {count} multiple choice questions.", inst2: "Each question has four options, only one is correct.", inst3: "Time limit: {time} minutes", inst4: "For CTET Paper 2 (Upper Primary Level) English Language and Pedagogy practice.", inst5: "Each question carries 1 mark, no negative marking.", mcqHeading: "=ØÝÜ English Language & Pedagogy Questions", answerKey: "' Answer Key", qNo: "Q. No.", ans: "Answer", print: "Print", download: "Download PDF", newSet: "New Practice Set", subjectLabel: "English Language & Pedagogy", noQuestions: "Questions not available. Please select other topics." } }; // ===================================================== // DOM REFS & STATE // ===================================================== let currentLang = 'en'; const startContainer = document.getElementById('startContainer'); const startScreen = document.getElementById('startScreen'); const practiceTypeSelection = document.getElementById('practiceTypeSelection'); const chapterSelection = document.getElementById('chapterSelection'); const levelSelection = document.getElementById('levelSelection'); const generatedPaperContainer = document.getElementById('generatedPaperContainer'); const startGeneratingBtn = document.getElementById('startGeneratingBtn'); const backToStartBtn = document.getElementById('backToStartBtn'); const proceedToChaptersBtn = document.getElementById('proceedToChaptersBtn'); const backToPracticeTypeBtn = document.getElementById('backToPracticeTypeBtn'); 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'); const decreaseCount = document.getElementById('decreaseCount'); const increaseCount = document.getElementById('increaseCount'); const questionCountSpan = document.getElementById('questionCount'); const homeIconBtn = document.getElementById('homeIconBtn'); let selectedTopics = []; let selectedLevel = null; let selectedPracticeType = null; let questionCount = 50; let timeLimit = 60; // ===================================================== // UI LANGUAGE APPLICATION // ===================================================== function applyUILanguage(lang) { const t = uiText[lang]; document.getElementById('mainTitle').textContent = t.mainTitle; document.getElementById('mainSubtitle').textContent = t.mainSubtitle; document.getElementById('startTitle').textContent = t.startTitle; document.getElementById('startDesc').textContent = t.startDesc; document.getElementById('startBtnText').textContent = t.startBtn; document.getElementById('practiceTypeTitle').textContent = t.practiceTypeTitle; document.getElementById('practiceTypeDesc').textContent = t.practiceTypeDesc; document.getElementById('optChapterTitle').textContent = t.optChapterTitle; document.getElementById('optChapterDesc').textContent = t.optChapterDesc; document.getElementById('optFullTitle').textContent = t.optFullTitle; document.getElementById('optFullDesc').textContent = t.optFullDesc; document.getElementById('optPrevTitle').textContent = t.optPrevTitle; document.getElementById('optPrevDesc').textContent = t.optPrevDesc; document.getElementById('backStartBtnText').textContent = t.backStartBtn; document.getElementById('proceedBtnText').textContent = t.proceedBtn; document.getElementById('chapterTitle').textContent = t.chapterTitle; document.getElementById('qCountTitle').textContent = t.qCountTitle; document.getElementById('backPracticeBtnText').textContent = t.backPracticeBtn; document.getElementById('generateAssignBtnText').textContent = t.generateAssignBtn; document.getElementById('levelTitle').textContent = t.levelTitle; document.getElementById('levelDesc').textContent = t.levelDesc; document.getElementById('l1Title').textContent = t.l1Title; document.getElementById('l1Sub').textContent = t.l1Sub; document.getElementById('l2Title').textContent = t.l2Title; document.getElementById('l2Sub').textContent = t.l2Sub; document.getElementById('l3Title').textContent = t.l3Title; document.getElementById('l3Sub').textContent = t.l3Sub; document.getElementById('timerTitle').textContent = t.timerTitle; document.getElementById('t30').textContent = t.t30; document.getElementById('t45').textContent = t.t45; document.getElementById('t60').textContent = t.t60; document.getElementById('t90').textContent = t.t90; document.getElementById('backChaptersBtnText').textContent = t.backChaptersBtn; document.getElementById('generateFinalBtnText').textContent = t.generateFinalBtn; // Reload topics to update labels loadTopics(); // If paper is already generated, re-render if (!generatedPaperContainer.classList.contains('hidden')) { if (selectedTopics.length > 0 && selectedLevel) { generatePaper(selectedTopics, selectedLevel, currentLang); } } } // ===================================================== // CORE LOGIC // ===================================================== function loadTopics() { const container = document.getElementById('engTopicsContainer'); const t = uiText[currentLang]; const fullPaperLabel = "' All Topics (Full Syllabus - 28 Chapters)"; container.innerHTML = `<div class="checkbox-item"><input type="checkbox" id="fullPaper" name="topic" value="8 - @ 5 ? 7 / "><label for="fullPaper">${fullPaperLabel}</label></div>`; topicKeys.forEach((key, idx) => { const id = `topic${idx}`; container.innerHTML += `<div class="checkbox-item"><input type="checkbox" id="${id}" name="topic" value="${key}"><label for="${id}">=ØÖÜ ${key}</label></div>`; }); document.getElementById('fullPaper')?.addEventListener('change', (e) => { const checkboxes = document.querySelectorAll('input[name="topic"]:not(#fullPaper)'); checkboxes.forEach(cb => cb.disabled = e.target.checked); if(e.target.checked) checkboxes.forEach(cb => cb.checked = false); }); } function getSelectedTopics() { const full = document.getElementById('fullPaper'); if(full && full.checked) return [...topicKeys]; return Array.from(document.querySelectorAll('input[name="topic"]:checked')).filter(cb => cb.id !== 'fullPaper').map(cb => cb.value); } function getRandomQuestions(topics, level, count) { let allQuestions = []; topics.forEach(topic => { if(questionBank[topic] && questionBank[topic][`level${level}`]) { allQuestions = allQuestions.concat(questionBank[topic][`level${level}`]); } }); if(allQuestions.length === 0) { const t = uiText[currentLang]; return Array(count).fill({ question: t.noQuestions, options: ["A", "B", "C", "D"], answer: "A" }); } allQuestions = allQuestions.sort(() => Math.random() - 0.5); return allQuestions.slice(0, Math.min(count, allQuestions.length)); } function showPracticeTypeSelection() { startScreen.classList.add('hidden'); practiceTypeSelection.classList.remove('hidden'); } function backToStart() { generatedPaperContainer.classList.add('hidden'); startContainer.classList.remove('hidden'); practiceTypeSelection.classList.add('hidden'); chapterSelection.classList.add('hidden'); levelSelection.classList.add('hidden'); startScreen.classList.remove('hidden'); selectedTopics = []; selectedLevel = null; selectedPracticeType = null; questionCount = 50; timeLimit = 60; questionCountSpan.textContent = "50"; document.querySelectorAll('.option-card').forEach(c => c.classList.remove('selected')); document.querySelectorAll('.timer-btn').forEach(b => b.classList.remove('selected')); if(document.querySelector('.timer-btn[data-time="60"]')) document.querySelector('.timer-btn[data-time="60"]').classList.add('selected'); level1Btn.classList.remove('selected'); level2Btn.classList.remove('selected'); level3Btn.classList.remove('selected'); } function backToPracticeType() { chapterSelection.classList.add('hidden'); practiceTypeSelection.classList.remove('hidden'); } function backToChapters() { levelSelection.classList.add('hidden'); chapterSelection.classList.remove('hidden'); } function showChapters() { const t = uiText[currentLang]; if(!selectedPracticeType) { alert(t.noPracticeAlert); return; } practiceTypeSelection.classList.add('hidden'); chapterSelection.classList.remove('hidden'); loadTopics(); } function showLevelSelection() { const t = uiText[currentLang]; selectedTopics = getSelectedTopics(); if(selectedTopics.length === 0) { alert(t.noTopicAlert); return; } chapterSelection.classList.add('hidden'); levelSelection.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.onclick = () => selectLevel(1); level2Btn.onclick = () => selectLevel(2); level3Btn.onclick = () => selectLevel(3); decreaseCount.onclick = () => { if(questionCount > 10) { questionCount -= 5; questionCountSpan.textContent = questionCount; } }; increaseCount.onclick = () => { if(questionCount < 100) { questionCount += 5; questionCountSpan.textContent = questionCount; } }; document.querySelectorAll('.option-card').forEach(card => { card.addEventListener('click', () => { document.querySelectorAll('.option-card').forEach(c => c.classList.remove('selected')); card.classList.add('selected'); selectedPracticeType = card.dataset.type; if(selectedPracticeType === 'full-length') { questionCount = 50; questionCountSpan.textContent = "50"; } else if(selectedPracticeType === 'previous-year') { questionCount = 45; questionCountSpan.textContent = "45"; } }); }); document.querySelectorAll('.timer-btn').forEach(btn => { btn.addEventListener('click', () => { document.querySelectorAll('.timer-btn').forEach(b => b.classList.remove('selected')); btn.classList.add('selected'); timeLimit = parseInt(btn.dataset.time); }); }); function getPracticeTypeName(type) { const t = uiText[currentLang]; if(type === 'chapter-wise') return '=ØÖÜ ' + t.optChapterTitle; if(type === 'full-length') return '=ØÝÜ ' + t.optFullTitle; if(type === 'previous-year') return 'ó# ' + t.optPrevTitle; return '=ØÝÜ ' + t.subjectLabel; } function generatePaper(topics, level, lang) { const t = uiText[lang]; const mcqs = getRandomQuestions(topics, level, questionCount); let paperHTML = ` <div class="header" style="background: linear-gradient(135deg, #007bff, #0056b3);"> <h2>=ØÝÜ CTET Paper 2 - ${t.subjectLabel} Practice Set</h2> <h3>${getPracticeTypeName(selectedPracticeType)}</h3> <p>${level === 1 ? t.l1Title : level === 2 ? t.l2Title : t.l3Title} - ${level === 1 ? t.l1Sub : level === 2 ? t.l2Sub : t.l3Sub} | Time: ${timeLimit} min</p> <p>Total Questions: ${questionCount}</p> </div> <div class="content-area"> <div class="instructions"> <p><strong>${t.instructions}</strong></p> <ol> <li>${t.inst1.replace('{count}', questionCount)}</li> <li>${t.inst2}</li> <li>${t.inst3.replace('{time}', timeLimit)}</li> <li>${t.inst4}</li> <li>${t.inst5}</li> </ol> </div> <div class="question-section"> <div class="section-heading" style="font-size:1.2rem; font-weight:bold; margin-bottom:15px;">${t.mcqHeading}</div>`; let qNum = 1; mcqs.forEach(mcq => { paperHTML += `<div class="question"><div class="question-text">${qNum}. ${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>`; qNum++; }); paperHTML += `</div><div class="answer-sheet"><h3 class="section-title">${t.answerKey}</h3><table class="answer-table"><thead><tr><th>${t.qNo}</th><th>${t.ans}</th><th>${t.qNo}</th><th>${t.ans}</th><th>${t.qNo}</th><th>${t.ans}</th></tr></thead><tbody>`; for(let i=0; i<mcqs.length; i+=3) { paperHTML += `<tr>`; for(let j=0; j<3; j++) { if(i+j < mcqs.length) paperHTML += `<td>${i+j+1}</td><td>${mcqs[i+j].answer}</td>`; else paperHTML += `<td></td><td></td>`; } paperHTML += `</tr>`; } paperHTML += `</tbody></table></div><div class="action-buttons"><button class="btn btn-primary" id="printBtn"><i class="fas fa-print"></i> ${t.print}</button><button class="btn btn-success" id="downloadBtn"><i class="fas fa-download"></i> ${t.download}</button><button class="btn btn-danger" id="newAssignmentBtn"><i class="fas fa-plus"></i> ${t.newSet}</button></div></div>`; generatedPaperContainer.innerHTML = paperHTML; generatedPaperContainer.classList.remove('hidden'); startContainer.classList.add('hidden'); document.getElementById('printBtn')?.addEventListener('click', () => window.print()); document.getElementById('downloadBtn')?.addEventListener('click', downloadPDF); document.getElementById('newAssignmentBtn')?.addEventListener('click', () => backToStart()); } 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; let position = 12.7; let remainingHeight = tempDiv.scrollHeight; let pageNum = 1; while (remainingHeight > 0) { const canvas = await html2canvas(tempDiv, { scale: 1.5, backgroundColor: '#ffffff' }); const imgData = canvas.toDataURL('image/jpeg', 0.92); if(pageNum > 1) pdf.addPage(); pdf.addImage(imgData, 'JPEG', 12.7, 12.7, pageWidth, canvas.height * pageWidth / canvas.width); position += 277; remainingHeight -= 277 * 3.78; pageNum++; } pdf.save('CTET_Paper2_English_Pedagogy_Practice_Set.pdf'); } catch(e) { console.error(e); alert("PDF generation error"); } finally { if(tempDiv) document.body.removeChild(tempDiv); } } // ===================================================== // EVENT BINDINGS // ===================================================== startGeneratingBtn.onclick = showPracticeTypeSelection; backToStartBtn.onclick = backToStart; proceedToChaptersBtn.onclick = showChapters; backToPracticeTypeBtn.onclick = backToPracticeType; generateAssignmentBtn.onclick = showLevelSelection; backToChaptersBtn.onclick = backToChapters; generateFinalBtn.onclick = function() { const t = uiText[currentLang]; if(!selectedLevel) { alert(t.noLevelAlert); return; } generatePaper(selectedTopics, selectedLevel, currentLang); }; homeIconBtn.onclick = backToStart; // Default timer selection document.querySelector('.timer-btn[data-time="60"]')?.classList.add('selected'); // Initial load applyUILanguage('en'); </script> </body> </html>