204 lines
8.9 KiB
HTML
204 lines
8.9 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="ru">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>Редактирование опроса</title>
|
||
<!-- Добавляем проверку на различные пути -->
|
||
<script>
|
||
// Определяем путь к статическим файлам с учетом prod и dev окружений
|
||
function getStaticPath() {
|
||
if (window.location.pathname.includes('/ms/questioneer')) {
|
||
// Для продакшна
|
||
return '/ms/questioneer/static';
|
||
} else {
|
||
// Для локальной разработки
|
||
const basePath = window.location.pathname.split('/edit')[0];
|
||
// Проверяем, заканчивается ли путь на слеш
|
||
return basePath + (basePath.endsWith('/') ? 'static' : '/static');
|
||
}
|
||
}
|
||
|
||
// Динамически добавляем CSS
|
||
const cssLink = document.createElement('link');
|
||
cssLink.rel = 'stylesheet';
|
||
cssLink.href = getStaticPath() + '/css/style.css';
|
||
document.head.appendChild(cssLink);
|
||
</script>
|
||
|
||
<!-- Добавляем jQuery -->
|
||
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
|
||
<script src="https://cdnjs.cloudflare.com/ajax/libs/qrcode-generator/1.4.4/qrcode.min.js"></script>
|
||
<script>
|
||
document.addEventListener('DOMContentLoaded', function() {
|
||
// Динамически добавляем скрипты
|
||
const scriptPaths = [
|
||
'/js/common.js',
|
||
'/js/edit.js'
|
||
];
|
||
|
||
const staticPath = getStaticPath();
|
||
scriptPaths.forEach(path => {
|
||
const script = document.createElement('script');
|
||
script.src = staticPath + path;
|
||
document.body.appendChild(script);
|
||
});
|
||
});
|
||
</script>
|
||
</head>
|
||
<body>
|
||
<!-- Навигационная шапка -->
|
||
<header class="nav-header">
|
||
<div class="nav-container">
|
||
<a href="javascript:;" id="nav-home-link" class="nav-logo">Анонимные опросы</a>
|
||
<nav class="nav-menu">
|
||
<a href="javascript:;" id="nav-main-link" class="nav-link">Главная</a>
|
||
<a href="javascript:;" id="nav-create-link" class="nav-link">Создать опрос</a>
|
||
</nav>
|
||
</div>
|
||
</header>
|
||
|
||
<div class="container">
|
||
<h1>Редактирование опроса</h1>
|
||
|
||
<div id="loading">Загрузка опроса...</div>
|
||
|
||
<div class="form-container" id="edit-form-container" style="display: none;">
|
||
<form id="edit-questionnaire-form">
|
||
<div class="form-group">
|
||
<label for="title">Название опроса:</label>
|
||
<input type="text" id="title" name="title" required>
|
||
</div>
|
||
|
||
<div class="form-group">
|
||
<label for="description">Описание:</label>
|
||
<textarea id="description" name="description" rows="3"></textarea>
|
||
</div>
|
||
|
||
<div class="form-group">
|
||
<label for="display-type">Тип отображения:</label>
|
||
<select id="display-type" name="displayType">
|
||
<option value="default">Обычный</option>
|
||
<option value="tag_cloud">Облако тегов</option>
|
||
<option value="voting">Голосование</option>
|
||
<option value="poll">Опрос</option>
|
||
</select>
|
||
</div>
|
||
|
||
<div class="questions-container">
|
||
<h2>Вопросы</h2>
|
||
<div id="questions-list"></div>
|
||
|
||
<button type="button" id="add-question" class="btn btn-small">Добавить вопрос</button>
|
||
</div>
|
||
|
||
<div class="form-actions">
|
||
<div class="link-group">
|
||
<h3>Ссылки:</h3>
|
||
<div class="link-input-group">
|
||
<div>
|
||
<label for="public-link">Ссылка для голосования:</label>
|
||
<input type="text" id="public-link" readonly>
|
||
<button type="button" class="btn btn-small" id="copy-public-link">Копировать</button>
|
||
<button type="button" class="btn btn-small" id="show-qr-code">QR-код</button>
|
||
</div>
|
||
<div>
|
||
<label for="admin-link">Административная ссылка:</label>
|
||
<input type="text" id="admin-link" readonly>
|
||
<button type="button" class="btn btn-small" id="copy-admin-link">Копировать</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="form-buttons">
|
||
<a href="#" id="back-to-admin" class="btn btn-secondary">Вернуться</a>
|
||
<button type="submit" class="btn btn-primary">Сохранить изменения</button>
|
||
</div>
|
||
</div>
|
||
</form>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Шаблон для вопроса -->
|
||
<template id="question-template">
|
||
<div class="question-item" data-index="{{index}}">
|
||
<div class="question-header">
|
||
<h3>Вопрос {{number}}</h3>
|
||
<button type="button" class="btn-icon delete-question">
|
||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
|
||
<path d="M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z"/>
|
||
</svg>
|
||
</button>
|
||
</div>
|
||
|
||
<div class="form-group">
|
||
<label for="question-text-{{index}}">Текст вопроса:</label>
|
||
<input type="text" id="question-text-{{index}}" name="questions[{{index}}][text]" required>
|
||
</div>
|
||
|
||
<div class="form-group">
|
||
<label for="question-type-{{index}}">Тип вопроса:</label>
|
||
<select id="question-type-{{index}}" name="questions[{{index}}][type]" class="question-type-select">
|
||
<option value="single_choice">Один вариант</option>
|
||
<option value="multiple_choice">Несколько вариантов</option>
|
||
<option value="text">Текстовый ответ</option>
|
||
<option value="rating">Оценка</option>
|
||
<option value="scale">Шкала оценки</option>
|
||
<option value="tag_cloud">Облако тегов</option>
|
||
</select>
|
||
</div>
|
||
|
||
<div class="form-group">
|
||
<label>
|
||
<input type="checkbox" name="questions[{{index}}][required]" value="true">
|
||
Обязательный вопрос
|
||
</label>
|
||
</div>
|
||
|
||
<div class="options-container" id="options-container-{{index}}">
|
||
<h4>Варианты ответа</h4>
|
||
<div class="options-list" id="options-list-{{index}}"></div>
|
||
<button type="button" class="btn btn-small add-option" data-question-index="{{index}}">Добавить вариант</button>
|
||
</div>
|
||
|
||
<div class="scale-container" id="scale-container-{{index}}" style="display: none;">
|
||
<h4>Настройки шкалы</h4>
|
||
<div class="form-group">
|
||
<label for="scale-max-{{index}}">Максимальное значение:</label>
|
||
<select id="scale-max-{{index}}" name="questions[{{index}}][scaleMax]">
|
||
<option value="5">5</option>
|
||
<option value="10" selected>10</option>
|
||
<option value="20">20</option>
|
||
</select>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
|
||
<!-- Шаблон для варианта ответа -->
|
||
<template id="option-template">
|
||
<div class="option-item" data-index="{{optionIndex}}">
|
||
<input type="text" name="questions[{{questionIndex}}][options][{{optionIndex}}][text]" placeholder="Вариант ответа">
|
||
<button type="button" class="btn-icon delete-option">
|
||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
|
||
<path d="M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z"/>
|
||
</svg>
|
||
</button>
|
||
</div>
|
||
</template>
|
||
|
||
<script>
|
||
// Добавляем корректные пути к ссылкам после загрузки страницы
|
||
document.addEventListener('DOMContentLoaded', function() {
|
||
// Определяем базовый путь с учетом /ms в продакшен-версии
|
||
const isMsPath = window.location.pathname.includes('/ms/questioneer');
|
||
const basePath = isMsPath ? '/ms/questioneer' : '/questioneer';
|
||
|
||
// Устанавливаем правильные ссылки
|
||
document.getElementById('nav-home-link').href = basePath;
|
||
document.getElementById('nav-main-link').href = basePath;
|
||
document.getElementById('nav-create-link').href = basePath + '/create';
|
||
});
|
||
</script>
|
||
</body>
|
||
</html> |