From e94e27267c7d00dd4b795e8b846e3d8db3116e38 Mon Sep 17 00:00:00 2001 From: Egor Deev Date: Fri, 2 Oct 2026 21:44:31 +0000 Subject: [PATCH] =?UTF-8?q?=D0=AD=D0=BA=D1=80=D0=B0=D0=BD=D0=B8=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=B4=D0=B0=D0=BD=D0=BD?= =?UTF-8?q?=D1=8B=D1=85=20=D0=B8=D0=B7=20API=20=D0=BF=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=B4=20=D0=B2=D1=81=D1=82=D0=B0=D0=B2=D0=BA=D0=BE=D0=B9=20?= =?UTF-8?q?=D0=B2=20HTML?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Названия и описания курсов, имена репетиторов, адреса и описания мест на карте вставлялись в разметку как есть — запись с HTML в общем учебном API выполнилась бы у каждого посетителя. Добавлена esc() в utils.js, через неё проходят все подстановки данных в HTML-шаблонах app.js, account.js и map.js. --- js/account.js | 36 ++++++++++++++++++------------------ js/app.js | 12 ++++++------ js/map.js | 20 ++++++++++---------- js/utils.js | 15 +++++++++++++-- 4 files changed, 47 insertions(+), 36 deletions(-) diff --git a/js/account.js b/js/account.js index 0b1da3f..8647358 100644 --- a/js/account.js +++ b/js/account.js @@ -118,13 +118,13 @@ function renderOrders() { c => c.id === order.course_id ); orderName = course ? course.name : - `Курс #${order.course_id}`; + `Курс #${esc(order.course_id)}`; } else if (order.tutor_id && order.tutor_id > 0) { const tutor = AccountState.tutors.find( t => t.id === order.tutor_id ); orderName = tutor ? `Репетитор: ${tutor.name}` : - `Репетитор #${order.tutor_id}`; + `Репетитор #${esc(order.tutor_id)}`; } const orderDate = formatDateTimeWithoutSeconds( @@ -133,22 +133,22 @@ function renderOrders() { ); tr.innerHTML = ` - ${orderNumber} - ${orderName} - ${orderDate} + ${esc(orderNumber)} + ${esc(orderName)} + ${esc(orderDate)} ${formatPrice(order.price)}
@@ -254,7 +254,7 @@ function viewOrderDetails(orderId) { if (course) { orderTitle = course.name; teacherInfo = `

Преподаватель: - ${course.teacher}

`; + ${esc(course.teacher)}

`; } } else if (order.tutor_id && order.tutor_id > 0) { const tutor = AccountState.tutors.find( @@ -284,7 +284,7 @@ function viewOrderDetails(orderId) { options.push('Доступ к интерактивной онлайн-платформе (+50%)'); const optionsBadges = options.map(opt => - `${opt}` + `${esc(opt)}` ).join(''); const contactData = ContactDataStorage.get(order.id); @@ -294,16 +294,16 @@ function viewOrderDetails(orderId) { contactInfo = `
Контактные данные:
-

Имя: ${contactData.name}

-

Телефон: ${contactData.phone}

-

Email: ${contactData.email}

+

Имя: ${esc(contactData.name)}

+

Телефон: ${esc(contactData.phone)}

+

Email: ${esc(contactData.email)}

${contactData.message ? `

Сообщение: ${contactData.message}

` : ''} `; } - let detailsHTML = `
${orderTitle}
${teacherInfo}`; + let detailsHTML = `
${esc(orderTitle)}
${teacherInfo}`; let priceLabel = ''; if (order.course_id && order.course_id > 0) { @@ -312,9 +312,9 @@ function viewOrderDetails(orderId) { ${formatDate(order.date_start)}

Время: ${formatTime(order.time_start)}

Продолжительность: - ${order.duration} часов

+ ${esc(order.duration)} часов

Количество студентов: - ${order.persons}

+ ${esc(order.persons)}

${options.length > 0 ? `

Выбранные опции:
${optionsBadges}

` : ''} @@ -328,9 +328,9 @@ function viewOrderDetails(orderId) { } detailsHTML += ` - ${contactInfo} + ${esc(contactInfo)}
-
${priceLabel}
+
${esc(priceLabel)}
`; content.innerHTML = detailsHTML; diff --git a/js/app.js b/js/app.js index a7d5472..a948f64 100644 --- a/js/app.js +++ b/js/app.js @@ -163,7 +163,7 @@ function renderCourses() { item.innerHTML = `
-
${course.name}
+
${esc(course.name)}
${getLevelText(course.level)} @@ -175,12 +175,12 @@ function renderCourses() {
- ${course.teacher} + ${esc(course.teacher)}
- ${course.total_length} недель, - ${course.week_length} ч/нед + ${esc(course.total_length)} недель, + ${esc(course.week_length)} ч/нед
@@ -582,13 +582,13 @@ function renderTutors() {
- ${tutor.name} + ${esc(tutor.name)} ${getLevelText(tutor.language_level)} ${tutor.languages_offered.join(', ')} - ${tutor.work_experience} лет + ${esc(tutor.work_experience)} лет ${formatPrice(tutor.price_per_hour)}/час `;