ORIENT/themes/modern2/pages/test-start.htm

253 lines
7.8 KiB
HTML

title = "Test start"
url = "/test/start/:id"
layout = "new/master-inside"
is_hidden = 0
robot_index = "index"
robot_follow = "follow"
==
<?php
function onStart(){
$this['questions'] = Tps\Tps\Models\TestQuestion::with('image')->where('test_id', $this->param('id'))->get()->shuffle();
$this['test_id'] = $this->param('id');
$this['otherTest'] = Tps\Tps\Models\Test::where('id', '!=', $this->param('id'))->with('image')->get();
}
?>
==
{% put styles %}
<style>
.aside-ad-wrapper-txt {
font-weight: bold !important;
font-size: 18px !important;
line-height: 1.4;
margin-top: 10px;
}
</style>
{% endput %}
<!-- Test ================================== -->
<main class="article">
<div class="container">
<div class="article-wrap">
<div class="trending-head affiche-head">
<h2>{{'test.tests'|_}}</h2>
<span></span>
</div>
<div class="article-inner">
<div class="article-content">
<div class="article-content-top">
<div class="article-desc" id="question_container">
<h4 class="article_desc-title" id="question_title"></h4>
<div class="article-test" id="question_answer"></div>
<div class="article-hint" id="description">
<div class="article_desc-photo" id="question_description_image"></div>
<p id="question_description_text"></p>
<div class="article_btn color-gr">
<a id="question_next_btn" onclick="openNewQuestion()">
{{'test.next'|_}}
</a>
</div>
</div>
</div>
</div>
</div>
<aside class="aside article-aside test-aside">
<h6 class="aside-ad-wrapper-title">
{{'test.see_also'|_}}
</h6>
{% for test in otherTest %}
<div class="aside-ad-wrapper">
<a href="{{'test'|page({id: test.id})}}">
<img src="{{test.image.path}}" alt="" />
</a>
<p class="aside-ad-wrapper-txt">
{{test.title}}
</p>
</div>
{% endfor %}
</aside>
</div>
</div>
</div>
</main>
<!-- Test end ============================== -->
<script>
let locale = '{{ activeLocale }}';
let test_id = '{{ test_id }}';
let questions;
let step = 1;
let correct_answers = 0;
function getQuestions() {
let request = new XMLHttpRequest();
let url = `${location.protocol + '//' + location.host}/${locale}/test/questions/${test_id}`
request.open('GET', url);
request.send();
request.onload = async function () {
questions = JSON.parse(this.response);
startNewQuestion();
}
}
function openNewQuestion(){
if(step <= questions.length){
startNewQuestion();
}else{
showResults();
}
}
function showResults(){
let question_title = document.getElementById("question_container");
let percentage = correct_answers / questions.length * 100;
let result_text = '<p>{{'test.results_100'|_}}</p>';
switch (true)
{
case (percentage <= 30):
result_text = '<p>{{'test.results_30'|_}}</p>';
break;
case (percentage <= 50):
result_text = '<p>{{'test.results_50'|_}}</p>';
break;
case (percentage <= 70):
result_text = '<p>{{'test.results_70'|_}}</p>';
break;
case (percentage <= 99):
result_text = '<p>{{'test.results_99'|_}}</p>';
break;
}
question_title.innerHTML =
`<h6 class="article_desc-result">
{{'test.results'|_}}
<br>
${correct_answers}/${questions.length}
</h6>
${result_text}`;
}
function startNewQuestion(){
let question = questions[step-1];
let question_title = document.getElementById("question_title");
question_title.innerHTML = '';
question_title.innerHTML =
`${question.question} <br> ${step}/${questions.length}`;
let description = document.getElementById("description");
description.classList.remove("active");
let question_description_text = document.getElementById("question_description_text");
question_description_text.innerHTML = '';
question_description_text.innerHTML =
`${question.description}`;
if(question.image){
let question_description_image = document.getElementById("question_description_image");
question_description_image.innerHTML = '';
question_description_image.innerHTML = `<img src="${question.image.path}" alt="test-photo">`;
}
let question_answer = document.getElementById("question_answer");
question_answer.innerHTML = '';
let answersBox = '';
question.answers.forEach(answer => {
let correct = answer.correct === "1" ? true : false;
let title = locale == 'ru' ? answer.title_ru :
locale == 'en' ? answer.title_en : answer.title_tm;
answersBox +=
`<button class="article-test-btn" onclick="checkAnswer(this, ${correct})">
<p>${title}</p>
</button>`;
});
question_answer.innerHTML = answersBox;
step++;
refreshButtons();
}
function checkAnswer(button, correct){
button.classList.add(correct ? "true" : "false");
let description = document.getElementById("description");
description.classList.add("active");
if(correct){
correct_answers++;
}
}
function refreshButtons(){
let btn = document.querySelectorAll('.article-test-btn');
let hint = document.querySelector('.article-hint');
if (btn != undefined) {
btn.forEach(x => {
x.addEventListener('click', function () {
btn.forEach(p => {
p.setAttribute("disabled", "true");
p.classList.add('disabled');
})
hint.classList.add('active');
});
})
}
}
const parent = document.querySelector('.article-test');
let maxWords = 0;
let maxWordsIndex = -1;
// Loop through each <p> tag
const paragraphs = parent.querySelectorAll('p');
paragraphs.forEach((paragraph, index) => {
// Count the number of words in the paragraph
const wordCount = paragraph.textContent.trim().split(/\s+/).length;
// Check if this paragraph has the most words so far
if (wordCount > maxWords) {
maxWords = wordCount;
maxWordsIndex = index;
}
});
// Add the appropriate class to the parent <div>
if (maxWords >= 20) {
parent.classList.add('bigger');
} else if (maxWords >= 10) {
parent.classList.add('big');
}
getQuestions();
</script>