upsc_quiz-1.0.x-dev/templates/upsc-quiz-main.html.twig

templates/upsc-quiz-main.html.twig
{#
/**
 * @file
 * Template for UPSC Quiz main page.
 *
 * Available variables:
 * - quiz_data: Array containing quiz questions and sections
 * - user_data: Array containing user information
 * - settings: Array containing quiz settings
 */
#}

<div id="upsc-quiz-app" class="upsc-quiz-wrapper">
  <!-- Welcome Screen -->
  <div class="screen" id="welcomeScreen">
    <div class="welcome-content">
      <h2>{{ 'Welcome to UPSC Exam Preparation Quiz'|t }}</h2>
      <p>{{ 'Test your knowledge across all major subjects covered in the Gujarat Public Service Commission examination.'|t }}</p>
      
      <div class="quiz-sections">
        <h3>{{ 'Quiz Sections Available:'|t }}</h3>
        <div class="sections-grid">
          <div class="section-card" data-section="reasoning">
            <i class="fas fa-brain"></i>
            <h4>{{ 'Reasoning & Logic'|t }}</h4>
            <p>{{ 'Logical reasoning, puzzles, and analytical skills'|t }}</p>
            <span class="question-count">{{ '15 Questions'|t }}</span>
          </div>
          <div class="section-card" data-section="english">
            <i class="fas fa-language"></i>
            <h4>{{ 'English Language'|t }}</h4>
            <p>{{ 'Grammar, comprehension, and vocabulary'|t }}</p>
            <span class="question-count">{{ '10 Questions'|t }}</span>
          </div>
          <div class="section-card" data-section="polity">
            <i class="fas fa-landmark"></i>
            <h4>{{ 'Indian Polity'|t }}</h4>
            <p>{{ 'Constitution, governance, and political system'|t }}</p>
            <span class="question-count">{{ '15 Questions'|t }}</span>
          </div>
          <div class="section-card" data-section="history">
            <i class="fas fa-scroll"></i>
            <h4>{{ 'History'|t }}</h4>
            <p>{{ 'Ancient, medieval, and modern Indian history'|t }}</p>
            <span class="question-count">{{ '12 Questions'|t }}</span>
          </div>
          <div class="section-card" data-section="geography">
            <i class="fas fa-globe-asia"></i>
            <h4>{{ 'Geography'|t }}</h4>
            <p>{{ 'Physical and human geography of India'|t }}</p>
            <span class="question-count">{{ '10 Questions'|t }}</span>
          </div>
          <div class="section-card" data-section="current-affairs">
            <i class="fas fa-newspaper"></i>
            <h4>{{ 'Current Affairs'|t }}</h4>
            <p>{{ 'Recent developments and general knowledge'|t }}</p>
            <span class="question-count">{{ '8 Questions'|t }}</span>
          </div>
        </div>
      </div>

      <div class="quiz-options">
        <h3>{{ 'Choose Your Quiz Mode:'|t }}</h3>
        <div class="quiz-modes">
          <button class="mode-btn" id="practiceMode">
            <i class="fas fa-play-circle"></i>
            <span>{{ 'Practice Mode'|t }}</span>
            <small>{{ 'No time limit, immediate feedback'|t }}</small>
          </button>
          <button class="mode-btn" id="examMode">
            <i class="fas fa-stopwatch"></i>
            <span>{{ 'Exam Mode'|t }}</span>
            <small>{{ 'Time limit: @time minutes'|t({'@time': settings.time_limit}) }}</small>
          </button>
          <button class="mode-btn" id="sectionMode">
            <i class="fas fa-list"></i>
            <span>{{ 'Section-wise'|t }}</span>
            <small>{{ 'Practice specific subjects'|t }}</small>
          </button>
        </div>
      </div>

      {% if user_data.anonymous %}
        <div class="login-notice">
          <div class="alert alert-info">
            <i class="fas fa-info-circle"></i>
            <p>{{ 'To save your progress and view detailed statistics, please <a href="@login_url">log in</a> or <a href="@register_url">create an account</a>.'|t({
              '@login_url': path('user.login'),
              '@register_url': path('user.register')
            })|raw }}</p>
          </div>
        </div>
      {% endif %}
    </div>
  </div>

  <!-- Section Selection Screen -->
  <div class="screen hidden" id="sectionScreen">
    <div class="section-selection">
      <h2>{{ 'Choose a Section to Practice'|t }}</h2>
      <div class="section-buttons">
        <button class="section-btn" data-section="reasoning">
          <i class="fas fa-brain"></i>
          {{ 'Reasoning & Logic'|t }}
        </button>
        <button class="section-btn" data-section="english">
          <i class="fas fa-language"></i>
          {{ 'English Language'|t }}
        </button>
        <button class="section-btn" data-section="polity">
          <i class="fas fa-landmark"></i>
          {{ 'Indian Polity'|t }}
        </button>
        <button class="section-btn" data-section="history">
          <i class="fas fa-scroll"></i>
          {{ 'History'|t }}
        </button>
        <button class="section-btn" data-section="geography">
          <i class="fas fa-globe-asia"></i>
          {{ 'Geography'|t }}
        </button>
        <button class="section-btn" data-section="current-affairs">
          <i class="fas fa-newspaper"></i>
          {{ 'Current Affairs'|t }}
        </button>
      </div>
      <button class="back-btn" id="backToWelcome">
        <i class="fas fa-arrow-left"></i> {{ 'Back to Main Menu'|t }}
      </button>
    </div>
  </div>

  <!-- Quiz Screen -->
  <div class="screen hidden" id="quizScreen">
    <!-- Progress Bar -->
    <div class="progress-container">
      <div class="progress-bar">
        <div class="progress-fill" id="progressFill"></div>
      </div>
      <div class="progress-text">
        <span id="currentQuestion">1</span> {{ 'of'|t }} <span id="totalQuestions">{{ quiz_data.total_questions }}</span>
      </div>
    </div>

    <!-- Section Navigation -->
    <div class="section-nav" id="sectionNav">
      <button class="nav-section" data-section="reasoning">{{ 'Reasoning'|t }}</button>
      <button class="nav-section" data-section="english">{{ 'English'|t }}</button>
      <button class="nav-section" data-section="polity">{{ 'Polity'|t }}</button>
      <button class="nav-section" data-section="history">{{ 'History'|t }}</button>
      <button class="nav-section" data-section="geography">{{ 'Geography'|t }}</button>
      <button class="nav-section" data-section="current-affairs">{{ 'Current Affairs'|t }}</button>
    </div>

    <!-- Question Container -->
    <div class="question-container">
      <div class="question-header">
        <span class="question-section" id="questionSection">{{ 'Reasoning & Logic'|t }}</span>
        <span class="question-number" id="questionNumber">{{ 'Question 1'|t }}</span>
      </div>
      
      <div class="question-content">
        <h3 id="questionText">{{ 'Loading question...'|t }}</h3>
        <div class="options-container" id="optionsContainer">
          <!-- Options will be populated by JavaScript -->
        </div>
      </div>

      <div class="question-actions">
        <button class="action-btn secondary" id="prevBtn" disabled>
          <i class="fas fa-chevron-left"></i> {{ 'Previous'|t }}
        </button>
        <button class="action-btn secondary" id="skipBtn">
          {{ 'Skip'|t }} <i class="fas fa-chevron-right"></i>
        </button>
        <button class="action-btn primary" id="nextBtn" disabled>
          {{ 'Next'|t }} <i class="fas fa-chevron-right"></i>
        </button>
      </div>
    </div>

    <!-- Question Navigation Grid -->
    <div class="question-grid" id="questionGrid">
      <!-- Question numbers will be populated by JavaScript -->
    </div>

    <!-- Control Panel -->
    <div class="control-panel">
      <button class="control-btn" id="reviewBtn">
        <i class="fas fa-eye"></i> {{ 'Review Answers'|t }}
      </button>
      <button class="control-btn submit" id="submitBtn">
        <i class="fas fa-check"></i> {{ 'Submit Quiz'|t }}
      </button>
      <button class="control-btn" id="pauseBtn">
        <i class="fas fa-pause"></i> {{ 'Pause'|t }}
      </button>
    </div>
  </div>

  <!-- Results Screen -->
  <div class="screen hidden" id="resultsScreen">
    <div class="results-container">
      <div class="results-header">
        <h2><i class="fas fa-chart-line"></i> {{ 'Quiz Results'|t }}</h2>
        <div class="overall-score">
          <div class="score-circle">
            <span id="overallPercentage">0%</span>
          </div>
          <div class="score-details">
            <p>{{ 'Total Score:'|t }} <span id="totalScore">0/{{ quiz_data.total_questions }}</span></p>
            <p>{{ 'Time Taken:'|t }} <span id="timeTaken">00:00</span></p>
          </div>
        </div>
      </div>

      <div class="section-results" id="sectionResults">
        <!-- Section-wise results will be populated by JavaScript -->
      </div>

      <div class="performance-analysis">
        <h3><i class="fas fa-analytics"></i> {{ 'Performance Analysis'|t }}</h3>
        <div class="analysis-content" id="analysisContent">
          <!-- Performance analysis will be populated by JavaScript -->
        </div>
      </div>

      <div class="result-actions">
        <button class="action-btn primary" id="reviewAnswersBtn">
          <i class="fas fa-list-check"></i> {{ 'Review All Answers'|t }}
        </button>
        <button class="action-btn secondary" id="retakeQuizBtn">
          <i class="fas fa-redo"></i> {{ 'Retake Quiz'|t }}
        </button>
        <button class="action-btn secondary" id="newQuizBtn">
          <i class="fas fa-home"></i> {{ 'Main Menu'|t }}
        </button>
      </div>
    </div>
  </div>

  <!-- Review Screen -->
  <div class="screen hidden" id="reviewScreen">
    <div class="review-container">
      <div class="review-header">
        <h2><i class="fas fa-list-check"></i> {{ 'Answer Review'|t }}</h2>
        <div class="review-filters">
          <button class="filter-btn active" data-filter="all">{{ 'All Questions'|t }}</button>
          <button class="filter-btn" data-filter="correct">{{ 'Correct'|t }}</button>
          <button class="filter-btn" data-filter="incorrect">{{ 'Incorrect'|t }}</button>
          <button class="filter-btn" data-filter="skipped">{{ 'Skipped'|t }}</button>
        </div>
      </div>

      <div class="review-content" id="reviewContent">
        <!-- Review content will be populated by JavaScript -->
      </div>

      <div class="review-actions">
        <button class="action-btn secondary" id="backToResults">
          <i class="fas fa-arrow-left"></i> {{ 'Back to Results'|t }}
        </button>
      </div>
    </div>
  </div>

  <!-- Loading Overlay -->
  <div class="loading-overlay hidden" id="loadingOverlay">
    <div class="loading-spinner">
      <i class="fas fa-spinner fa-spin"></i>
      <p>{{ 'Loading quiz...'|t }}</p>
    </div>
  </div>

  <!-- Confirmation Modal -->
  <div class="modal-overlay hidden" id="modalOverlay">
    <div class="modal">
      <div class="modal-header">
        <h3 id="modalTitle">{{ 'Confirm Action'|t }}</h3>
      </div>
      <div class="modal-body">
        <p id="modalMessage">{{ 'Are you sure you want to proceed?'|t }}</p>
      </div>
      <div class="modal-actions">
        <button class="action-btn secondary" id="modalCancel">{{ 'Cancel'|t }}</button>
        <button class="action-btn primary" id="modalConfirm">{{ 'Confirm'|t }}</button>
      </div>
    </div>
  </div>
</div>

<!-- Hidden data for JavaScript -->
<script type="application/json" id="quiz-data">
  {{ quiz_data|json_encode|raw }}
</script>

<script type="application/json" id="user-data">
  {{ user_data|json_encode|raw }}
</script>

<script type="application/json" id="quiz-settings">
  {{ settings|json_encode|raw }}
</script>

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc