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>  |