IELTS Reading Practice Online Test
IELTS Reading Practice Online Test
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-
scale=1.0">
<title>IELTS Full Reading Practice</title>
<style>
*{
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: Arial, sans-serif;
background-color: #ffffff;
line-height: 1.4;
font-size: 16px;
}
.header {
background-color: #ffffff;
padding: 12px 20px;
border-bottom: 1px solid #e0e0e0;
display: flex;
justify-content: space-between;
align-items: center;
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 100;
height: 60px;
}
.ielts-logo {
display: none;
}
.test-info {
display: flex;
align-items: center;
gap: 30px;
font-size: 14px;
color: #333;
}
.audio-indicator {
display: flex;
align-items: center;
gap: 8px;
font-size: 16px;
}
.audio-icon {
width: 16px;
height: 16px;
background: url('data:image/svg+xml,<svg
xmlns="[Link] viewBox="0 0 24 24" fill="none"
stroke="currentColor" stroke-width="2"><polygon points="11 5 6 9 2 9 2 15 6 15
11 19 11 5"></polygon></svg>') no-repeat center;
}
.header-icons {
display: flex;
gap: 10px;
align-items: center;
}
.telegram-link {
color: #0088cc;
text-decoration: none;
font-weight: 600;
font-size: 16px;
display: flex;
align-items: center;
gap: 8px;
}
.telegram-link:hover {
text-decoration: underline;
}
.telegram-link::before {
content: '';
display: inline-block;
width: 20px;
height: 20px;
background-color: currentColor;
-webkit-mask-image: url('data:image/svg+xml,<svg
xmlns="[Link] viewBox="0 0 24 24"><path d="M9.78
18.65l.28-4.23l7.68-6.92c.34-.31-.07-.46-.52-.19L7.74 13.3L3.64 12c-.88-.25-.89-
1.37.2-1.64l16.56-6.4c.75-.29 1.4.22 1.2.94l-2.67 12.61c-.22.95-1.13 1.18-
1.78.73l-4.5-3.32l-2.23 2.15c-.47.44-1.29.21-1.48-.37z"/></svg>');
mask-image: url('data:image/svg+xml,<svg
xmlns="[Link] viewBox="0 0 24 24"><path d="M9.78
18.65l.28-4.23l7.68-6.92c.34-.31-.07-.46-.52-.19L7.74 13.3L3.64 12c-.88-.25-.89-
1.37.2-1.64l16.56-6.4c.75-.29 1.4.22 1.2.94l-2.67 12.61c-.22.95-1.13 1.18-
1.78.73l-4.5-3.32l-2.23 2.15c-.47.44-1.29.21-1.48-.37z"/></svg>');
background-size: contain;
background-repeat: no-repeat;
}
#volume-slider {
-webkit-appearance: none;
width: 80px;
height: 4px;
background: #ddd;
outline: none;
border-radius: 2px;
cursor: pointer;
}
#volume-slider::-webkit-slider-thumb {
-webkit-appearance: none;
appearance: none;
width: 14px;
height: 14px;
border-radius: 50%;
background: #333;
cursor: pointer;
}
#volume-slider::-moz-range-thumb {
width: 14px;
height: 14px;
border-radius: 50%;
background: #333;
cursor: pointer;
border: none;
}
.icon {
width: 20px;
height: 20px;
cursor: pointer;
opacity: 0.7;
color: #333;
display: flex;
align-items: center;
justify-content: center;
}
.icon:hover {
opacity: 1;
}
#play-pause-btn {
background: none;
border: none;
padding: 0;
}
.main-container {
margin-top: 60px;
display: flex;
flex-direction: column;
background: #ffffff;
height: calc(100vh - 60px); /* Full height minus header */
}
.panels-container {
display: flex;
flex: 1;
overflow: hidden;
}
.passage-panel {
flex: 1;
padding: 20px 20px 100px;
overflow-y: auto;
min-width: 200px; /* Minimum width */
}
/* Passage Content */
.text-center {
text-align: center;
}
.reading-passage h4 {
font-size: 20px;
font-weight: bold;
margin-bottom: 15px;
text-align: center;
}
.reading-passage p {
margin-bottom: 1.2em;
}
.question ul li label {
display: block;
margin-top: 8px;
cursor: pointer;
}
.questions-panel {
flex: 1;
padding: 20px 20px 100px;
overflow-y: auto;
min-width: 200px; /* Minimum width */
border-left: 1px solid #e0e0e0;
}
.resizer {
width: 10px;
cursor: col-resize;
background-color: #f0f0f0;
background-image: url('data:image/svg+xml;charset=UTF-8,<svg
xmlns="[Link] width="10" height="30" viewBox="0 0 10
30"><path d="M4 11h2v2H4zM4 15h2v2H4zM4 19h2v2H4z"
fill="%23888"/></svg>');
background-repeat: no-repeat;
background-position: center;
flex-shrink: 0;
flex-grow: 0;
}
/* Left Panel */
.left-panel {
width: 100%;
padding: 20px;
}
/* Right Panel */
.right-panel {
display: none;
width: 50%;
padding: 20px;
position: relative;
}
.help-button {
background: #4a90e2;
color: white;
border: none;
padding: 6px 12px;
border-radius: 4px;
font-size: 14px;
cursor: pointer;
display: inline-flex;
align-items: center;
gap: 5px;
margin-bottom: 20px;
}
.help-button:hover {
background: #357abd;
}
.section-title {
font-weight: bold;
margin-bottom: 15px;
font-size: 18px;
}
.people-section {
margin-bottom: 30px;
}
.people-table {
width: 100%;
border-collapse: collapse;
border: 1px solid #ccc;
}
.people-table th {
text-align: left;
padding: 10px;
font-weight: bold;
border: 1px solid #ddd;
}
.people-table td {
padding: 8px 10px;
border: 1px solid #ddd;
}
.person-name {
font-size: 16px;
}
.question-number {
background: white;
border: 1px solid #4a90e2;
padding: 4px 8px;
border-radius: 3px;
font-weight: bold;
font-size: 14px;
color: #4a90e2;
min-width: 30px;
text-align: center;
}
.assigned-responsibility {
background: #f0f0f0;
padding: 4px 8px;
border-radius: 3px;
font-size: 14px;
border: 1px solid #ddd;
}
.responsibilities-section {
margin-bottom: 30px;
}
.responsibility-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 8px;
margin-bottom: 20px;
}
.responsibility-item {
background: #f8f9fa;
border: 1px solid #ddd;
padding: 8px 12px;
border-radius: 4px;
cursor: move;
font-size: 16px;
text-align: center;
transition: all 0.2s;
}
.responsibility-item:hover {
background: #e9ecef;
transform: translateY(-1px);
}
.[Link] {
opacity: 0.5;
}
.questions-section {
margin-bottom: 20px;
}
.question-title {
font-weight: bold;
margin-bottom: 10px;
font-size: 16px;
}
.instruction {
margin-bottom: 20px;
font-size: 16px;
color: #666;
}
/* Map Styles */
.map-container {
position: relative;
margin: 20px 0;
display: flex;
justify-content: center;
}
.map-svg {
border: 2px solid #333;
background: white;
}
.map-room {
fill: #f9f9f9;
stroke: #333;
stroke-width: 1;
}
.map-text {
font-family: Arial, sans-serif;
font-size: 13px;
text-anchor: middle;
fill: #333;
}
.map-number {
font-family: Arial, sans-serif;
font-size: 16px;
font-weight: bold;
text-anchor: middle;
fill: #333;
}
.room-labels {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 10px;
margin: 20px 0;
}
.room-label {
background: #f8f9fa;
border: 1px solid #ddd;
padding: 8px 12px;
border-radius: 4px;
cursor: move;
font-size: 16px;
text-align: center;
transition: all 0.2s;
}
.room-label:hover {
background: #e9ecef;
transform: translateY(-1px);
}
.[Link] {
opacity: 0.5;
}
/* Navigation Arrows */
.nav-arrows {
position: fixed;
bottom: 100px;
right: 20px;
display: flex;
gap: 5px;
z-index: 101;
}
.nav-arrow {
width: 50px;
height: 50px;
background: #333;
color: white;
border: none;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
font-size: 22px;
font-weight: bold;
}
.nav-arrow:hover {
background: #555;
}
.nav-arrow:disabled {
background: #ccc;
cursor: not-allowed;
}
padding: 0;
display: flex;
align-items: center;
height: 80px;
z-index: 100;
}
.footer__questionWrapper___1tZ46 {
display: flex;
align-items: center;
margin-right: 20px;
}
.footer__questionNo___3WNct {
background: none;
border: none;
padding: 10px 15px;
font-size: 16px;
font-weight: 600;
color: #333;
cursor: pointer;
display: flex;
align-items: center;
gap: 5px;
transition: background-color 0.2s;
}
.footer__questionNo___3WNct:hover {
background-color: #f8f9fa;
}
.section-prefix {
font-size: 16px;
}
.sectionNr {
font-size: 16px;
font-weight: bold;
}
.attemptedCount {
font-size: 14px;
color: #666;
margin-left: 5px;
font-weight: 400; /* Normal weight */
}
.footer__questionWrapper___1tZ46.selected .attemptedCount {
display: none;
}
.footer__subquestionWrapper___9GgoP {
display: none;
gap: 2px;
margin-left: 10px;
}
.footer__questionWrapper___1tZ46.selected .footer__subquestionWrap
per___9GgoP {
display: flex;
}
.subQuestion {
width: 32px;
height: 32px;
border: 1px solid #ccc;
background: white;
color: #333;
font-size: 14px;
font-weight: 500;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.2s;
border-radius: 2px;
}
.[Link] {
background-color: #e9ecef;
border-color: #ddd;
}
.[Link] {
background-color: #28a745;
color: white;
border-color: #28a745;
}
.[Link] {
background-color: #dc3545;
color: white;
border-color: #dc3545;
}
.subQuestion:hover {
background-color: #f0f0f0;
border-color: #999;
}
.[Link] {
background-color: #4a90e2;
color: white;
border-color: #4a90e2;
}
.[Link] {
background-color: #28a745;
color: white;
border-color: #28a745;
}
.sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}
.footer__deliverButton___3FM07 {
margin-left: auto;
margin-right: 20px;
background-color: #f0f0f0;
color: #333;
border: 1px solid #ccc;
padding: 12px 20px;
border-radius: 4px;
font-size: 16px;
font-weight: 600;
cursor: pointer;
display: flex;
align-items: center;
gap: 8px;
transition: background-color 0.2s, border-color 0.2s;
min-width: 170px;
justify-content: center;
}
.footer__deliverButton___3FM07:hover {
background-color: #e0e0e0;
border-color: #bbb;
}
.footer__deliverButton___3FM07:disabled {
background: #e9ecef;
color: #6c757d;
cursor: not-allowed;
border-color: #ddd;
}
.fa-check::before {
content: "✓";
}
.hidden {
display: none !important;
}
/* Context Menu */
.context-menu {
position: absolute;
background: white;
border: 1px solid #ccc;
border-radius: 6px;
box-shadow: 0 4px 12px rgba(0,0,0,0.15);
z-index: 1000;
display: none;
min-width: 140px;
}
.context-menu-item {
padding: 12px 16px;
cursor: pointer;
font-size: 16px;
border-bottom: 1px solid #f0f0f0;
transition: background-color 0.2s;
display: flex;
align-items: center;
gap: 8px;
}
.context-menu-item:hover {
background-color: #f8f9fa;
}
.context-menu-item:last-child {
border-bottom: none;
}
.highlight {
background-color: #ffff00;
}
.comment-highlight {
background-color: #90EE90;
position: relative;
cursor: help;
}
.comment-tooltip {
position: absolute;
bottom: 100%;
left: 50%;
transform: translateX(-50%);
background: #333;
color: white;
padding: 8px 12px;
border-radius: 4px;
font-size: 14px;
white-space: nowrap;
z-index: 1000;
opacity: 0;
pointer-events: none;
transition: opacity 0.3s;
}
.comment-highlight:hover .comment-tooltip {
opacity: 1;
}
.question {
margin-bottom: 40px;
}
.question p {
margin-bottom: 10px;
}
.question ul, .question .people-table {
margin-top: 0;
}
.question-prompt {
margin-bottom: 20px;
}
.question ul {
list-style: none;
padding-left: 0;
}
.question ul li {
margin-bottom: 5px;
}
.answer-input {
border: 1px solid #888;
border-radius: 4px;
background-color: #fff;
padding: 2px 5px;
font-size: 16px;
text-align: center;
margin-right: 4px;
margin-left: 4px;
transition: border-color 0.3s, box-shadow 0.3s;
height: 28px; /* Standard height */
width: 150px; /* Standard width */
}
.[Link]-input {
border-color: #4a90e2;
box-shadow: 0 0 3px 1px rgba(74, 144, 226, 0.5);
}
.answer-input::placeholder {
color: #999;
font-weight: bold;
text-align: center;
}
.[Link] {
border-color: #28a745;
background-color: #e9f7ef;
}
.[Link] {
border-color: #dc3545;
background-color: #f8d7da;
color: #721c24;
}
.answer-input {
z-index: 10;
position: relative;
pointer-events: auto;
}
.drag-drop-container {
display: flex;
gap: 30px;
margin-top: 20px;
align-items: flex-start;
}
.recommendations-box {
display: flex;
flex-direction: column;
gap: 8px;
padding: 10px;
border: 1px solid #ccc;
border-radius: 5px;
background-color: #f9f9f9;
min-height: 200px;
}
.drag-item {
background: white;
border: 1px solid #ddd;
padding: 8px 12px;
border-radius: 4px;
cursor: move;
font-size: 16px;
transition: all 0.2s;
user-select: none;
}
.drag-item:hover {
background: #e9ecef;
}
.[Link] {
opacity: 0.5;
}
.[Link] {
border-color: #4a90e2;
box-shadow: 0 0 0 2px rgba(74, 144, 226, 0.5);
}
.drop-zone {
border: 2px dashed #aaa;
border-radius: 4px;
width: 50%;
margin-top: 19px;
margin-bottom: 5px;
transition: background-color 0.2s, border-color 0.2s;
padding: 0.5px;
display: flex;
align-items: center;
justify-content: center;
position: relative;
}
.[Link]-over {
background-color: #e6f4ff;
border-color: #4a90e2;
}
.[Link] {
background-color: #e9f7ef;
border-color: #28a745;
border-style: solid;
}
.[Link] {
background-color: #f8d7da;
border-color: #dc3545;
border-style: solid;
}
.[Link] {
pointer-events: none;
}
.drop-zone .drag-item {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
font-size: 15px;
padding: 2px;
}
.drag-options-container {
margin-top: 10px;
}
.drag-options-container .drag-item {
display: block;
width: fit-content;
font-size: 15px;
padding: 0.5px 10px;
margin-bottom: 5px;
}
.drag-options-container .drag-item:last-child {
margin-bottom: 0;
}
.q-number {
color: #888;
font-size: 14px;
font-weight: bold;
}
.questions-container {
width: 100%;
}
audio {
width: 100%;
margin-bottom: 20px;
}
.part-header {
background-color: #f1f2ec;
padding: 15px 20px;
border: 1px solid #e0e0e0;
text-align: left;
margin: 10px 20px;
border-radius: 5px;
}
.part-header p {
margin: 0;
}
.part-header p:first-child {
margin-bottom: 5px;
}
.question [Link] {
color: #155724;
font-weight: bold;
}
.question [Link] {
color: #721c24;
}
.question [Link]::before {
content: '✔ ';
color: #28a745;
}
.question [Link]::before {
content: '✖ ';
color: #dc3545;
}
.example-box {
border: 1px solid #ddd;
background-color: #f9f9f9;
padding: 15px;
border-radius: 5px;
margin: 20px 0;
}
.timer-container {
display: flex;
position: relative;
cursor: default;
color: #333;
font-size: 16px;
font-weight: 500;
align-items: center;
}
.timer-container .timer-tooltip {
display: none;
}
.timer-controls {
display: flex;
align-items: center;
gap: 8px;
margin-left: 15px;
}
.timer-controls button {
background: #f0f0f0;
border: 1px solid #ccc;
border-radius: 50%;
padding: 0;
cursor: pointer;
width: 32px;
height: 32px;
display: flex;
align-items: center;
justify-content: center;
transition: background-color 0.2s;
}
.timer-controls button:hover {
background: #e0e0e0;
}
.audio-modal-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(40, 40, 40, 0.9);
z-index: 2000;
display: flex;
justify-content: center;
align-items: center;
color: white;
text-align: center;
}
.audio-modal-content {
display: flex;
flex-direction: column;
align-items: center;
gap: 20px;
max-width: 500px;
padding: 20px;
}
.audio-modal-content p {
font-size: 16px;
line-height: 1.5;
color: #eee;
}
.audio-modal-icon {
margin-bottom: 20px;
}
.modal-play-btn {
background-color: #000;
color: white;
border: 1px solid white;
padding: 12px 24px;
border-radius: 6px;
font-size: 18px;
font-weight: 600;
cursor: pointer;
display: flex;
align-items: center;
gap: 8px;
transition: background-color 0.2s;
}
.modal-play-btn:hover {
background-color: #333;
}
#goto-widget {
display: flex;
align-items: center;
gap: 5px;
}
#goto-input {
width: 80px;
padding: 4px 8px;
border: 1px solid #ccc;
border-radius: 4px;
}
#goto-btn {
padding: 4px 10px;
border: 1px solid #ccc;
background-color: #f0f0f0;
border-radius: 4px;
cursor: pointer;
}
.questions-panel {
flex: 1;
padding: 20px 20px 100px;
overflow-y: auto;
min-width: 200px; /* Minimum width */
border-left: 1px solid #e0e0e0;
}
.[Link] {
background-color: #f8d7da;
border-color: #dc3545 !important;
}
.summary-completion-container {
margin-top: 20px;
}
.summary-text p {
line-height: 2.5;
font-size: 16px;
}
.summary-drop-zone {
display: inline-flex;
align-items: center;
justify-content: center;
vertical-align: middle;
max-width:200px;
height: 25px;
border: 2px dashed #999;
border-radius: 4px;
margin: 0 5px;
padding: 0 5px;
transition: border-color 0.3s, box-shadow 0.3s, background-color
0.3s;
color: #aaa;
font-weight: bold;
}
.[Link] {
border-color: #4a90e2;
}
.[Link]-input {
border-color: #4a90e2;
box-shadow: none;
}
.summary-drop-zone .drag-item {
font-size: 15px;
font-weight: bold;
background-color: transparent;
border: none;
padding: 0;
text-align: center;
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}
.summary-options-bank {
display: flex;
flex-wrap: wrap;
gap: 10px;
margin-top: 20px;
padding: 10px;
border: 1px solid #ddd;
border-radius: 5px;
}
.summary-options-bank .drag-item {
flex-grow: 1;
min-width: 100px;
text-align: center;
}
.multi-choice-question {
margin-bottom: 20px;
padding: 10px;
border-radius: 4px;
border: 3px solid transparent;
transition: border-color 0.3s, background-color 0.3s;
}
.multi-choice-option {
margin-bottom: 10px;
padding: 8px;
border-radius: 4px;
transition: background-color 0.3s;
}
.multi-choice-option label {
display: flex;
align-items: center;
cursor: pointer;
font-size: 16px;
}
.multi-choice-option input[type="checkbox"],
.multi-choice-option input[type="radio"] {
margin-right: 12px;
transform: scale(1.3);
accent-color: #4a90e2;
}
.[Link] {
background-color: #e9f7ef;
}
.[Link] {
background-color: #f8d7da;
}
.[Link] {
background-color: #f8d7da;
border-color: #dc3545 !important;
}
.matching-question-item .[Link] {
border-color: #4a90e2;
}
.matching-question-item .drop-zone {
width: 200px;
height: 40px;
}
.paragraph-matching-question {
align-items: center;
justify-content: space-between;
gap: 15px;
margin-bottom: 12px;
}
.paragraph-matching-question .answer-input {
width: 80px;
flex-shrink: 0;
}
.matching-form-container {
margin-top: 20px;
}
.matching-form-row {
display: flex;
align-items: center;
margin-bottom: 12px;
}
.matching-form-label {
width: 180px;
flex-shrink: 0;
}
/* Results Modal */
.modal-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.7);
z-index: 2000;
display: flex;
justify-content: center;
align-items: center;
}
.[Link] {
display: none;
}
.modal-content {
background: white;
padding: 25px;
border-radius: 8px;
width: 90%;
max-width: 600px;
max-height: 80vh;
display: flex;
flex-direction: column;
position: relative;
}
.modal-close-btn {
position: absolute;
top: 10px;
right: 15px;
background: none;
border: none;
font-size: 28px;
cursor: pointer;
color: #888;
}
.modal-content h2 {
text-align: center;
margin-bottom: 15px;
color: #333;
}
.results-summary {
display: flex;
justify-content: space-around;
margin-bottom: 20px;
font-size: 18px;
font-weight: bold;
text-align: center;
border-bottom: 1px solid #eee;
padding-bottom: 15px;
}
.results-details-container {
overflow-y: auto;
padding-right: 10px; /* For scrollbar */
}
.result-row {
display: grid;
grid-template-columns: 40px 1fr 1fr;
gap: 15px;
padding: 8px 5px;
border-bottom: 1px solid #f0f0f0;
font-size: 15px;
}
.[Link] {
background-color: #f8d7da;
}
.result-row .q-num {
font-weight: bold;
}
.result-row .user-ans {
color: #555;
}
.result-row .correct-ans {
color: #155724;
font-weight: 500;
}
.correct-answer-display {
font-weight: bold;
color: #28a745;
margin-left: 10px;
font-size: 14px;
}
.correct-answer-highlight, .[Link]-answer-highlight, .multi-
[Link]-answer-highlight {
background-color: #d4edda !important;
border: 1px solid #c3e6cb !important;
border-radius: 4px;
padding: 4px;
}
.correct-answer-highlight {
background-color: #d4edda;
border: 1px solid #c3e6cb;
border-radius: 4px;
}
.centered-title {
text-align: center;
font-size: 50px;
font-weight: bold;
margin-bottom: 15px;
}
</style>
</head>
<body>
<div class="header">
<div class="timer-container">
<span class="timer-display">60:00</span>
<div class="timer-controls">
<button id="timer-toggle-btn" title="Pause/Resume Timer">
<svg xmlns="[Link] height="24px"
viewBox="0 0 24 24" width="24px"><path d="M0 0h24v24H0V0z"
fill="none"/><path d="M8 5v14l11-7L8 5z"/></svg>
</button>
<button id="timer-reset-btn" title="Reset Timer">
<svg xmlns="[Link] height="24px"
viewBox="0 0 24 24" width="24px"><path d="M0 0h24v24H0V0z"
fill="none"/><path d="M12 5V1L7 6l5 5V7c3.31 0 6 2.69 6 6s-2.69 6-6 6-6-2.69-
6-6H4c0 4.42 3.58 8 8 8s8-3.58 8-8-3.58-8-8-8z"/></svg>
</button>
</div>
</div>
<a href="[Link] target="_blank"
class="telegram-link">
Shakhna Academy
</a>
</div>
</div>
<div class="resizer" id="resizer"></div>
<div class="questions-panel" id="questions-panel">
<div id="questions-1" class="question-set">
<div class="questions-container">
</div>
</div>
<div id="questions-3" class="question-set hidden">
<div class="questions-container">
<div class="tf-question">
<div class="tf-question-line"><span class="tf-question-
number">27</span> Young people are easily persuaded by surveys that listening
to music is beneficial</div>
<div class="tf-options">
<label><input type="radio" name="q27" value="YES">
YES</label>
<label><input type="radio" name="q27" value="NO">
NO</label>
<label><input type="radio" name="q27" value="NOT
GIVEN"> NOT GIVEN</label>
</div>
</div>
<div class="tf-question">
<div class="tf-question-line"><span class="tf-question-
number">28</span> Different studies share the same conclusions about the
desirability of working in silence</div>
<div class="tf-options">
<label><input type="radio" name="q28" value="YES">
YES</label>
<label><input type="radio" name="q28" value="NO">
NO</label>
<label><input type="radio" name="q28" value="NOT
GIVEN"> NOT GIVEN</label>
</div>
</div>
<div class="tf-question">
<div class="tf-question-line"><span class="tf-question-
number">29</span> Some doctors recommend wearing headphones to lower
blood pressure</div>
<div class="tf-options">
<label><input type="radio" name="q29" value="YES">
YES</label>
<label><input type="radio" name="q29" value="NO">
NO</label>
<label><input type="radio" name="q29" value="NOT
GIVEN"> NOT GIVEN</label>
</div>
</div>
<div class="tf-question">
<div class="tf-question-line"><span class="tf-question-
number">30</span> Nathaniel Baldwin was a respected government
researcher</div>
<div class="tf-options">
<label><input type="radio" name="q30" value="YES">
YES</label>
<label><input type="radio" name="q30" value="NO">
NO</label>
<label><input type="radio" name="q30" value="NOT
GIVEN"> NOT GIVEN</label>
</div>
</div>
<div class="tf-question">
<div class="tf-question-line"><span class="tf-question-
number">31</span> The effect of the invention of headphones is comparable to
the effect of the invention of the writing</div>
<div class="tf-options">
<label><input type="radio" name="q31" value="YES">
YES</label>
<label><input type="radio" name="q31" value="NO">
NO</label>
<label><input type="radio" name="q31" value="NOT
GIVEN"> NOT GIVEN</label>
</div>
</div>
</div>
<div class="multi-choice-question">
<p><b>32.</b> What does the writer suggest about a service economy?
</p>
<div class="multi-choice-options">
<label><input type="radio" name="q32" value="A"> A The work is
mentally demanding</label><br>
<label><input type="radio" name="q32" value="B"> B It provides
employment for younger workers</label><br>
<label><input type="radio" name="q32" value="C"> C It is a small
part of a country’s economy</label><br>
<label><input type="radio" name="q32" value="D"> D Workers have
to live in urban centres</label>
</div>
</div>
<div class="multi-choice-question">
<p><b>33.</b> When the writer mentions the historical evidence for
early music he is</p>
<div class="multi-choice-options">
<label><input type="radio" name="q33" value="A"> A emphasizing
the diversity of musical forms</label><br>
<label><input type="radio" name="q33" value="B"> B expressing his
frustration with the limited archaeological evidence uncovered</label><br>
<label><input type="radio" name="q33" value="C"> C lending support
to the view that music has been important in human history</label><br>
<label><input type="radio" name="q33" value="D"> D creating a
geographical map of the evolution of music</label>
</div>
</div>
<div class="multi-choice-question">
<p><b>34.</b> What does the writer say about the social effects of
listening to music through headphones?</p>
<div class="multi-choice-options">
<label><input type="radio" name="q34" value="A"> A It has caused a
reduction in the number of people who listen to music</label><br>
<label><input type="radio" name="q34" value="B"> B It has increased
people’s participation in music events</label><br>
<label><input type="radio" name="q34" value="C"> C It has reduced
the global variation of music styles</label><br>
<label><input type="radio" name="q34" value="D"> D It has changed
the traditional role of music in society</label>
</div>
</div>
<div class="multi-choice-question">
<p><b>35.</b> What does the writer say about personal independence?
</p>
<div class="multi-choice-options">
<label><input type="radio" name="q35" value="A"> A Americans are
unique in their desire for personal independence</label><br>
<label><input type="radio" name="q35" value="B"> B Personal
independence is something that can be purchased</label><br>
<label><input type="radio" name="q35" value="C"> C Striving for
personal independence is a recent phenomenon</label><br>
<label><input type="radio" name="q35" value="D"> D Personal
independence destroys social connections</label>
</div>
</div>
<div class="multi-choice-question">
<p><b>36.</b> Why does the writer quote Jonah Lehrer in the last
paragraph?</p>
<div class="multi-choice-options">
<label><input type="radio" name="q36" value="A"> A to support the
writer’s own view</label><br>
<label><input type="radio" name="q36" value="B"> B to draw
attention to an authoritative book about music</label><br>
<label><input type="radio" name="q36" value="C"> C to raise
awareness of people’s loss of listening skills</label><br>
<label><input type="radio" name="q36" value="D"> D to illustrate
how music brings people closer to each other</label>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
[Link]('DOMContentLoaded', () => {
// --- STATE VARIABLES ---
let currentPassage = 1;
let currentQuestion = 1;
let selectedRange = null;
let timeInSeconds = 3600;
let timerInterval;
let draggedItem = null;
let activeQuestionElement = null;
let selectedDragItem = null;
[Link]('input', updateAllIndicators);
[Link]('change', updateAllIndicators);
[Link]('click', checkAnswers);
[Link]('click', toggleTimer);
[Link]('click', resetTimer);
function checkAnswers() {
// Disable all inputs to prevent changes
const allInputs = [Link]('input, select, textarea');
[Link](input => {
[Link] = true;
});
clearInterval(timerInterval);
let score = 0;
const totalQuestions = 40;
const resultsDetailsContainer = [Link]('results-
details');
[Link] = '';
if (isCorrect) {
score++;
[Link]('correct');
} else {
[Link]('incorrect');
const correctAnswerSpan = [Link]('span');
[Link] = 'correct-answer-display';
[Link] = ` ➜ <span
class="correct-answer-highlight">${correctAnswerText}</span>`;
[Link](correctAnswerSpan,
[Link]);
}
}
// Handle Radio Button Inputs (T/F, MCQs)
else if ([Link] > 0) {
const questionContainer = radioGroup[0].closest('.tf-question') ||
radioGroup[0].closest('.multi-choice-question');
const checkedRadio =
[Link](`input[name="q${i}"]:checked`);
if (checkedRadio) {
userAnswer = [Link];
userAnswerDisplay = userAnswer;
isCorrect = userAnswer === correctAnswer;
const userLabel = [Link]('.tf-option, .multi-
choice-option');
if (userLabel) {
[Link](isCorrect ? 'correct' : 'incorrect');
}
}
if (isCorrect) {
score++;
} else {
if (questionContainer){
const correctOptionEl =
[Link](`input[value="${correctAnswerText}"]`);
if (correctOptionEl) {
const correctLabel = [Link]('.tf-
option, .multi-choice-option');
if (correctLabel) {
[Link]('correct-answer-highlight');
}
}
}
}
}
// Handle Checkbox Groups (e.g., questions 21-22)
else if (i === 21 || i === 22) {
// For questions 21-22, check if the user selected the correct
combination
const checkedBoxes =
[Link]('input[name="q21-22"]:checked');
const userAnswers = [Link](checkedBoxes).map(cb =>
[Link]).sort();
const correctAnswers21_22 = ['B', 'D']; // The correct answers
for questions 21-22
if (i === 21) {
// Only check once for the pair
userAnswerDisplay = [Link] > 0 ?
[Link](', ') : 'Not Answered';
isCorrect = [Link] === 2 &&
[Link](ans =>
correctAnswers21_22.includes(ans)) &&
correctAnswers21_22.every(ans =>
[Link](ans));
if (isCorrect) {
score += 2; // Both questions are correct
// Mark both questions as correct in nav
const nav21 =
[Link](`.subQuestion[onclick="goToQuestion(21)"]`);
const nav22 =
[Link](`.subQuestion[onclick="goToQuestion(22)"]`);
if (nav21) [Link]('correct');
if (nav22) [Link]('correct');
} else {
// Mark both as incorrect in nav
const nav21 =
[Link](`.subQuestion[onclick="goToQuestion(21)"]`);
const nav22 =
[Link](`.subQuestion[onclick="goToQuestion(22)"]`);
if (nav21) [Link]('incorrect');
if (nav22) [Link]('incorrect');
}
[Link]('results-score').textContent = score;
[Link]('results-band').textContent =
calculateBandScore(score);
[Link]('results-
modal').[Link]('hidden');
}
function calculateBandScore(score) {
if (score >= 39) return '9.0';
const mapping = {
40: 9.0, 39: 9.0, 38: 8.5, 37: 8.5, 36: 8.0, 35: 8.0, 34: 7.5,
33: 7.5, 32: 7.0, 31: 7.0, 30: 7.0, 29: 6.5, 28: 6.5, 27: 6.5,
26: 6.0, 25: 6.0, 24: 6.0, 23: 5.5, 22: 5.5, 21: 5.5, 20: 5.5,
19: 5.0, 18: 5.0, 17: 5.0, 16: 5.0, 15: 5.0, 14: 4.5, 13: 4.5,
12: 4.0, 11: 4.0, 10: 4.0, 9: 3.5, 8: 3.5, 7: 3.0, 6: 3.0,
5: 2.5, 4: 2.5
};
if (score <= 0) return 0.0;
if (score === 1) return 1.0;
if (score <= 3) return 2.0;
if (score <= 5) return 2.5;
return mapping[score] || 0.0;
}
function getUserAnswer(qNum) {
const textInput = [Link](`q${qNum}`);
const radioInput = [Link](`input[name="q$
{qNum}"]:checked`);
const dropZone = [Link](`.drop-zone[data-q-
start="${qNum}"]`);
function findQuestionElement(qNum) {
return [Link](`[data-q-start="${qNum}"]`);
}
function showResultsModal() {
[Link]('results-
modal').[Link]('hidden');
}
[Link] = function() {
[Link]('results-modal').[Link]('hidden');
}
function disableInputs() {
[Link] = `<span>Checked! View
Results.</span>`;
[Link]('click', checkAnswers);
[Link] = showResultsModal;
const elementsToMark = [
[Link](`.tf-question[data-q-start="${qNum}"]`),
[Link](`.multi-choice-question[data-q-start="$
{qNum}"]`),
[Link](`.matching-question-item[data-q-start="$
{qNum}"]`),
[Link](`.drop-zone[data-q-start="${qNum}"]`),
[Link](`q${qNum}`),
[Link](`input[name="q$
{qNum}"]:checked`)?.closest('.tf-option'),
[Link](`input[name="q$
{qNum}"]:checked`)?.closest('.multi-choice-option')
];
[Link](el => {
if (el) [Link](isCorrect ? 'correct' : 'incorrect');
});
function goToQuestion(questionNumber) {
// Prevent unnecessary recursion: if already at the right passage and
question, do nothing
if (currentQuestion === questionNumber) {
let passageNumber = 1;
if (questionNumber >= 14 && questionNumber <= 26)
passageNumber = 2;
else if (questionNumber >= 27) passageNumber = 3;
if (currentPassage === passageNumber) {
return;
}
}
currentQuestion = questionNumber;
let passageNumber = 1;
if (questionNumber >= 14 && questionNumber <= 26)
passageNumber = 2;
else if (questionNumber >= 27) passageNumber = 3;
if (currentPassage !== passageNumber) {
switchToPart(passageNumber, questionNumber);
return;
}
if (activeQuestionElement) {
[Link]('active-question', 'active-
input');
}
if (targetEl) {
activeQuestionElement = targetEl;
if ([Link]('input[type="text"]') ||
[Link]('select')) {
[Link]('active-input');
} else {
[Link]('active-question');
}
scrollIntoViewIfNeeded(targetEl);
} else {
const pMatch = [Link](`.paragraph-matching-
question select[id="q${questionNumber}"]`);
if(pMatch) {
activeQuestionElement = pMatch;
[Link]('active-input');
scrollIntoViewIfNeeded(pMatch);
}
}
updateNavigation();
}
function updateNavigation() {
const navButtons = [Link]('.subQuestion');
[Link](btn => [Link]('active'));
const activeNav =
[Link](`.subQuestion[onclick="goToQuestion($
{currentQuestion})"]`);
if (activeNav) {
[Link]('active');
}
function selectDragItem(item) {
if (selectedDragItem) {
[Link]('selected');
}
selectedDragItem = item;
if (selectedDragItem) {
[Link]('selected');
}
}
function updateAnsweredNav() {
const navButtons = [Link]('.subQuestion');
[Link](btn => {
const qNum = parseInt([Link], 10);
if (isQuestionAnswered(qNum)) {
[Link]('answered');
} else {
[Link]('answered');
}
});
}
function isQuestionAnswered(qNum) {
// Special handling for questions 21-22 checkbox group
if (qNum === 21 || qNum === 22) {
const checkedBoxes =
[Link]('input[name="q21-22"]:checked');
return [Link] > 0;
}
function initializeDragAndDrop() {
[Link]('.drag-item').forEach(item => {
[Link]('dragstart', handleDragStart);
[Link]('dragend', handleDragEnd);
[Link]('click', () => selectDragItem(item));
});
[Link]('.drop-zone, .drag-options-
container').forEach(zone => {
[Link]('dragover', handleDragOver);
[Link]('dragleave', handleDragLeave);
[Link]('drop', handleDrop);
});
}
function handleDragStart(e) {
draggedItem = [Link];
setTimeout(() => [Link]('dragging'), 0);
}
function handleDragEnd(e) {
[Link]('dragging');
draggedItem = null;
}
function handleDragOver(e) {
[Link]();
const targetZone = [Link];
if (draggedItem && [Link] ===
[Link]) {
[Link]('drag-over');
}
}
function handleDragLeave(e) {
[Link]('drag-over');
}
function handleDrop(e) {
[Link]();
const targetZone = [Link];
[Link]('drag-over');
// First, clear the target drop-zone of any text (like question numbers)
before adding the new item.
if ([Link]('drop-zone')) {
[Link]([Link]).forEach(node => {
if ([Link] === Node.TEXT_NODE) {
[Link]();
}
});
}
// Move the item that was in the target (if any) to the source zone.
if (existingItemInTarget) {
[Link](existingItemInTarget);
}
// After the move, clean up the source zone if it's a drop-zone and is
now empty.
if ([Link]('drop-zone') && !
[Link]('.drag-item')) {
[Link]('filled');
const qNum = [Link];
[Link] = qNum; // Restore the question number
}
updateAllIndicators();
}
function startTimer() {
if (timerInterval) clearInterval(timerInterval); // Ensure no multiple
intervals
timerInterval = setInterval(() => {
timeInSeconds--;
const minutes = [Link](timeInSeconds / 60);
const seconds = timeInSeconds % 60;
[Link] = `${[Link]().padStart(2, '0')}:
${[Link]().padStart(2, '0')}`;
if (timeInSeconds <= 0) {
clearInterval(timerInterval);
[Link] = "Time's up!";
// checkAnswers(); // Disabled to prevent modal from opening
automatically.
}
}, 1000);
[Link] = pauseIcon;
}
function pauseTimer() {
clearInterval(timerInterval);
[Link] = playIcon;
}
function toggleTimer() {
// Check based on the icon currently displayed
if ([Link]('M6 19h4V5H6v14z')) {
// Check for pause icon shape
pauseTimer();
} else {
startTimer();
}
}
function resetTimer() {
timeInSeconds = 3600;
updateTimerDisplay();
startTimer();
[Link] = pauseIcon;
}
function setupCheckboxLimits() {
const checkboxGroups = [
{ name: 'q21-22', limit: 2 },
{ name: 'q38-40', limit: 3 }
];
[Link](group => {
const checkboxes = [Link](`input[name="$
{[Link]}"]`);
[Link](checkbox => {
[Link]('change', () => {
const checkedCount =
[Link](`input[name="${[Link]}"]:checked`).length;
if (checkedCount > [Link]) [Link] = false;
updateAllIndicators();
});
});
});
}
function setupExampleHeading() {
const exampleBox = [Link]('.example-box');
if(exampleBox){
const title = [Link]('p');
[Link] = 'bold';
[Link] = 'List of Statements';
// [Link](title, [Link]);
}
}
function initResize(e) {
[Link]();
const startX = [Link];
const startWidth = [Link];
removeFloatingButtons();
highlightBtn = [Link]('button');
[Link] = 'Highlight';
[Link] = 'absolute';
[Link] = 9999;
[Link] = '#ffe066';
[Link] = '1px solid #aaa';
[Link] = '2px 10px';
[Link] = '4px';
[Link] = 'pointer';
// Position button near selection
const rect = [Link]();
[Link] = `${[Link] + [Link]}px`;
[Link] = `${[Link] + [Link] -
30}px`;
[Link](highlightBtn);
[Link] = function() {
const span = [Link]('span');
[Link] = 'highlight';
[Link] = '#ffe066';
[Link]([Link]());
[Link](span);
removeFloatingButtons();
[Link]().removeAllRanges();
};
} else {
removeFloatingButtons();
}
} else {
removeFloatingButtons();
}
}, 10);
});
// Use event delegation for highlight removal
[Link](panel => {
[Link]('click', (e) => {
const highlightEl = [Link]('.highlight');
if (highlightEl) {
// Prevent double creation
if (removeHighlightBtn && highlightTarget === highlightEl)
return;
removeFloatingButtons();
removeHighlightBtn = [Link]('button');
[Link] = 'Remove Highlight';
[Link] = 'absolute';
[Link] = 9999;
[Link] = '#ffb3b3';
[Link] = '1px solid #aaa';
[Link] = '2px 10px';
[Link] = '4px';
[Link] = 'pointer';
const rect = [Link]();
[Link] = `${[Link] +
[Link]}px`;
[Link] = `${[Link] + [Link]
- 30}px`;
[Link](removeHighlightBtn);
highlightTarget = highlightEl;
[Link]('click', function(ev) {
[Link]();
// Unwrap highlight
const parent = [Link];
while ([Link]) {
[Link]([Link],
highlightTarget);
}
[Link](highlightTarget);
[Link]();
removeFloatingButtons();
});
}
});
});
function closeContextMenu() {
[Link] = 'none';
selectedRange = null; // Clear range after menu closes
}
function unwrapElement(element) {
const parent = [Link];
if (!parent) return;
while ([Link]) {
[Link]([Link], element);
}
[Link](element);
[Link]();
}
[Link] = () => {
if (selectedRange && ![Link]) {
const span = [Link]('span');
[Link] = 'highlight';
[Link]([Link]());
[Link](span);
}
closeContextMenu();
[Link]().removeAllRanges();
};
[Link] = () => {
const note = prompt('Enter your note:');
if (note && selectedRange && ![Link]) {
const span = [Link]('span');
[Link] = 'comment-highlight';
const tooltip = [Link]('span');
[Link] = 'comment-tooltip';
[Link] = note;
[Link]([Link]());
[Link](tooltip);
[Link](span);
}
closeContextMenu();
[Link]().removeAllRanges();
};
[Link] = () => {
const elementToClear = [Link];
if (elementToClear) {
unwrapElement(elementToClear);
}
closeContextMenu();
[Link]().removeAllRanges();
};
[Link] = () => {
[Link]('.highlight, .comment-
highlight').forEach(unwrapElement);
closeContextMenu();
[Link]().removeAllRanges();
};