Fix: UTF-8 кодировка в modal + исправлен backdrop

 urlencode/decodeURIComponent вместо base64
 modal-dialog-scrollable для прокрутки
 Обработка null для matching/ordering
 aria-hidden='true' для accessibility

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
mirivlad 2026-03-27 17:25:34 +08:00
parent 26eabf0cfa
commit 965eb593db
1 changed files with 13 additions and 11 deletions

View File

@ -35,10 +35,10 @@
<strong> <strong>
<a href="#" class="text-decoration-none" data-bs-toggle="modal" data-bs-target="#questionPreviewModal" <a href="#" class="text-decoration-none" data-bs-toggle="modal" data-bs-target="#questionPreviewModal"
data-question-type="{{ $question->type }}" data-question-type="{{ $question->type }}"
data-question-text="{{ base64_encode($question->question_text) }}" data-question-text="{{ urlencode($question->question_text) }}"
data-answers="{{ base64_encode($question->answers->toJson()) }}" data-answers="{{ urlencode($question->answers->toJson()) }}"
data-matching-pairs="{{ base64_encode($question->matchingPairs->toJson()) }}" data-matching-pairs="{{ urlencode($question->matchingPairs->toJson()) }}"
data-ordering-items="{{ base64_encode($question->orderingItems->toJson()) }}"> data-ordering-items="{{ urlencode($question->orderingItems->toJson()) }}">
{{ Str::limit(strip_tags($question->question_text), 100) }} {{ Str::limit(strip_tags($question->question_text), 100) }}
</a> </a>
</strong> </strong>
@ -65,12 +65,12 @@
</div> </div>
<!-- Modal предпросмотра вопроса --> <!-- Modal предпросмотра вопроса -->
<div class="modal fade" id="questionPreviewModal" tabindex="-1"> <div class="modal fade" id="questionPreviewModal" tabindex="-1" aria-hidden="true">
<div class="modal-dialog modal-lg"> <div class="modal-dialog modal-lg modal-dialog-scrollable">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title">Предпросмотр вопроса</h5> <h5 class="modal-title">Предпросмотр вопроса</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<div id="modalQuestionText" class="mb-4"></div> <div id="modalQuestionText" class="mb-4"></div>
@ -89,10 +89,12 @@ document.addEventListener('DOMContentLoaded', function() {
previewModal.addEventListener('show.bs.modal', function(event) { previewModal.addEventListener('show.bs.modal', function(event) {
const button = event.relatedTarget; const button = event.relatedTarget;
const questionType = button.getAttribute('data-question-type'); const questionType = button.getAttribute('data-question-type');
const questionText = atob(button.getAttribute('data-question-text')); const questionText = decodeURIComponent(button.getAttribute('data-question-text'));
const answers = JSON.parse(atob(button.getAttribute('data-answers'))); const answers = JSON.parse(decodeURIComponent(button.getAttribute('data-answers')));
const matchingPairs = JSON.parse(atob(button.getAttribute('data-matching-pairs') || 'bnVsbA==')); const matchingPairsAttr = button.getAttribute('data-matching-pairs');
const orderingItems = JSON.parse(atob(button.getAttribute('data-ordering-items') || 'bnVsbA==')); const orderingItemsAttr = button.getAttribute('data-ordering-items');
const matchingPairs = matchingPairsAttr ? JSON.parse(decodeURIComponent(matchingPairsAttr)) : [];
const orderingItems = orderingItemsAttr ? JSON.parse(decodeURIComponent(orderingItemsAttr)) : [];
// Отображаем текст вопроса // Отображаем текст вопроса
document.getElementById('modalQuestionText').innerHTML = questionText; document.getElementById('modalQuestionText').innerHTML = questionText;