Spaces:
Paused
Paused
Update index.html
Browse files- index.html +18 -19
index.html
CHANGED
|
@@ -3,14 +3,19 @@
|
|
| 3 |
<head>
|
| 4 |
<meta charset="UTF-8">
|
| 5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
-
<title>Swaga Icon Maker
|
| 7 |
<link rel="preconnect" href="https://fonts.googleapis.com">
|
| 8 |
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
| 9 |
<link href="https://fonts.googleapis.com/css2?family=Nunito:wght@400;700;900&display=swap" rel="stylesheet">
|
| 10 |
|
| 11 |
<style>
|
| 12 |
-
|
|
|
|
| 13 |
font-family: 'Nunito', sans-serif;
|
|
|
|
|
|
|
|
|
|
|
|
|
| 14 |
background-color: #1e1e1e;
|
| 15 |
color: white;
|
| 16 |
display: flex;
|
|
@@ -23,7 +28,7 @@
|
|
| 23 |
user-select: none;
|
| 24 |
}
|
| 25 |
|
| 26 |
-
h1 { margin-bottom: 10px; }
|
| 27 |
|
| 28 |
.container {
|
| 29 |
display: flex;
|
|
@@ -101,10 +106,8 @@
|
|
| 101 |
border: none;
|
| 102 |
background: #444;
|
| 103 |
color: white;
|
| 104 |
-
font-family: 'Nunito', sans-serif;
|
| 105 |
font-weight: 900;
|
| 106 |
font-size: 16px;
|
| 107 |
-
box-sizing: border-box;
|
| 108 |
}
|
| 109 |
|
| 110 |
input[type="range"] {
|
|
@@ -205,6 +208,7 @@
|
|
| 205 |
border-bottom: 1px solid #444;
|
| 206 |
padding-bottom: 15px;
|
| 207 |
margin-bottom: 15px;
|
|
|
|
| 208 |
}
|
| 209 |
|
| 210 |
.legal-text {
|
|
@@ -214,7 +218,7 @@
|
|
| 214 |
max-height: 60vh;
|
| 215 |
overflow-y: auto;
|
| 216 |
padding-right: 10px;
|
| 217 |
-
user-select: text;
|
| 218 |
text-align: justify;
|
| 219 |
}
|
| 220 |
|
|
@@ -224,6 +228,7 @@
|
|
| 224 |
|
| 225 |
.legal-text strong {
|
| 226 |
color: white;
|
|
|
|
| 227 |
}
|
| 228 |
|
| 229 |
/* Скроллбар внутри модалки */
|
|
@@ -249,7 +254,7 @@
|
|
| 249 |
</head>
|
| 250 |
<body>
|
| 251 |
|
| 252 |
-
<h1>MandreIcon Creator
|
| 253 |
|
| 254 |
<div class="container">
|
| 255 |
<!-- Область превью -->
|
|
@@ -311,7 +316,7 @@
|
|
| 311 |
<h2>Отказ от ответственности (Disclaimer)</h2>
|
| 312 |
<div class="legal-text">
|
| 313 |
<p><strong>1. Общие положения</strong><br>
|
| 314 |
-
Данный веб-инструмент ("Swaga Icon Maker
|
| 315 |
|
| 316 |
<p><strong>2. Пользовательский контент и Авторские права</strong><br>
|
| 317 |
Весь функционал сайта выполняется исключительно на стороне клиента (в вашем браузере). Мы не храним, не проверяем и не модерируем изображения, загружаемые пользователем.
|
|
@@ -323,6 +328,9 @@
|
|
| 323 |
<p><strong>4. Технические ограничения</strong><br>
|
| 324 |
Разработчик не гарантирует бесперебойную работу сайта, отсутствие программных ошибок или полную совместимость с конкретными устройствами и браузерами.</p>
|
| 325 |
|
|
|
|
|
|
|
|
|
|
| 326 |
<p>Используя данный сайт, вы выражаете свое полное согласие с вышеуказанными условиями.</p>
|
| 327 |
</div>
|
| 328 |
<button class="btn-primary" id="acceptBtn" style="margin-top: 20px;">Всё понятно</button>
|
|
@@ -387,7 +395,6 @@
|
|
| 387 |
|
| 388 |
function openModal() {
|
| 389 |
modalOverlay.style.display = 'flex';
|
| 390 |
-
// Небольшая задержка для анимации opacity
|
| 391 |
setTimeout(() => modalOverlay.classList.add('active'), 10);
|
| 392 |
}
|
| 393 |
|
|
@@ -400,7 +407,6 @@
|
|
| 400 |
closeModalBtn.addEventListener('click', closeModal);
|
| 401 |
acceptBtn.addEventListener('click', closeModal);
|
| 402 |
|
| 403 |
-
// Закрытие по клику вне окна
|
| 404 |
modalOverlay.addEventListener('click', (e) => {
|
| 405 |
if (e.target === modalOverlay) closeModal();
|
| 406 |
});
|
|
@@ -433,7 +439,6 @@
|
|
| 433 |
}
|
| 434 |
});
|
| 435 |
|
| 436 |
-
// Загрузка SVG для базы
|
| 437 |
dropZoneBase.addEventListener('click', () => fileInputBase.click());
|
| 438 |
dropZoneBase.addEventListener('dragover', (e) => { e.preventDefault(); dropZoneBase.classList.add('dragover'); });
|
| 439 |
dropZoneBase.addEventListener('dragleave', () => dropZoneBase.classList.remove('dragover'));
|
|
@@ -453,8 +458,7 @@
|
|
| 453 |
img.onload = () => {
|
| 454 |
baseLayer.type = 'image';
|
| 455 |
baseLayer.object = img;
|
| 456 |
-
textInput.value = '';
|
| 457 |
-
// Сброс слайдеров
|
| 458 |
scaleRange.value = 100;
|
| 459 |
offsetXRange.value = 0;
|
| 460 |
offsetYRange.value = 0;
|
|
@@ -509,7 +513,6 @@
|
|
| 509 |
drawAll();
|
| 510 |
}
|
| 511 |
|
| 512 |
-
// Удаление по кнопке Delete
|
| 513 |
window.addEventListener('keydown', (e) => {
|
| 514 |
if ((e.key === 'Delete' || e.key === 'Backspace') && selectedStickerIndex !== -1) {
|
| 515 |
if (document.activeElement === textInput) return;
|
|
@@ -598,27 +601,23 @@
|
|
| 598 |
const halfW = w / 2;
|
| 599 |
const halfH = h / 2;
|
| 600 |
|
| 601 |
-
// Рамка
|
| 602 |
ctx.strokeStyle = '#FFFFFF';
|
| 603 |
ctx.lineWidth = 2;
|
| 604 |
ctx.setLineDash([5, 5]);
|
| 605 |
ctx.strokeRect(-halfW, -halfH, w, h);
|
| 606 |
|
| 607 |
-
// Линия к вращалке
|
| 608 |
ctx.setLineDash([]);
|
| 609 |
ctx.beginPath();
|
| 610 |
ctx.moveTo(0, -halfH);
|
| 611 |
ctx.lineTo(0, -halfH - 25);
|
| 612 |
ctx.stroke();
|
| 613 |
|
| 614 |
-
// Ручка вращения
|
| 615 |
ctx.fillStyle = '#E13839';
|
| 616 |
ctx.beginPath();
|
| 617 |
ctx.arc(0, -halfH - 25, 8, 0, Math.PI * 2);
|
| 618 |
ctx.fill();
|
| 619 |
ctx.stroke();
|
| 620 |
|
| 621 |
-
// Ручка изменения размера
|
| 622 |
ctx.beginPath();
|
| 623 |
ctx.arc(halfW, halfH, 8, 0, Math.PI * 2);
|
| 624 |
ctx.fill();
|
|
@@ -788,7 +787,7 @@
|
|
| 788 |
drawAll();
|
| 789 |
|
| 790 |
const link = document.createElement('a');
|
| 791 |
-
link.download = '
|
| 792 |
link.href = canvas.toDataURL('image/png');
|
| 793 |
link.click();
|
| 794 |
|
|
|
|
| 3 |
<head>
|
| 4 |
<meta charset="UTF-8">
|
| 5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
+
<title>Swaga Icon Maker</title>
|
| 7 |
<link rel="preconnect" href="https://fonts.googleapis.com">
|
| 8 |
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
| 9 |
<link href="https://fonts.googleapis.com/css2?family=Nunito:wght@400;700;900&display=swap" rel="stylesheet">
|
| 10 |
|
| 11 |
<style>
|
| 12 |
+
/* Глобальное применение шрифта ко всем элементам */
|
| 13 |
+
* {
|
| 14 |
font-family: 'Nunito', sans-serif;
|
| 15 |
+
box-sizing: border-box;
|
| 16 |
+
}
|
| 17 |
+
|
| 18 |
+
body {
|
| 19 |
background-color: #1e1e1e;
|
| 20 |
color: white;
|
| 21 |
display: flex;
|
|
|
|
| 28 |
user-select: none;
|
| 29 |
}
|
| 30 |
|
| 31 |
+
h1 { margin-bottom: 10px; font-weight: 900; }
|
| 32 |
|
| 33 |
.container {
|
| 34 |
display: flex;
|
|
|
|
| 106 |
border: none;
|
| 107 |
background: #444;
|
| 108 |
color: white;
|
|
|
|
| 109 |
font-weight: 900;
|
| 110 |
font-size: 16px;
|
|
|
|
| 111 |
}
|
| 112 |
|
| 113 |
input[type="range"] {
|
|
|
|
| 208 |
border-bottom: 1px solid #444;
|
| 209 |
padding-bottom: 15px;
|
| 210 |
margin-bottom: 15px;
|
| 211 |
+
font-weight: 900;
|
| 212 |
}
|
| 213 |
|
| 214 |
.legal-text {
|
|
|
|
| 218 |
max-height: 60vh;
|
| 219 |
overflow-y: auto;
|
| 220 |
padding-right: 10px;
|
| 221 |
+
user-select: text;
|
| 222 |
text-align: justify;
|
| 223 |
}
|
| 224 |
|
|
|
|
| 228 |
|
| 229 |
.legal-text strong {
|
| 230 |
color: white;
|
| 231 |
+
font-weight: 900;
|
| 232 |
}
|
| 233 |
|
| 234 |
/* Скроллбар внутри модалки */
|
|
|
|
| 254 |
</head>
|
| 255 |
<body>
|
| 256 |
|
| 257 |
+
<h1>MandreIcon Creator</h1>
|
| 258 |
|
| 259 |
<div class="container">
|
| 260 |
<!-- Область превью -->
|
|
|
|
| 316 |
<h2>Отказ от ответственности (Disclaimer)</h2>
|
| 317 |
<div class="legal-text">
|
| 318 |
<p><strong>1. Общие положения</strong><br>
|
| 319 |
+
Данный веб-инструмент ("Swaga Icon Maker") предоставляется на условиях «как есть» (as is). Разработчик и владельцы ресурса не несут ответственности за любые прямые или косвенные убытки, возникшие в результате использования или невозможности использования данного сервиса.</p>
|
| 320 |
|
| 321 |
<p><strong>2. Пользовательский контент и Авторские права</strong><br>
|
| 322 |
Весь функционал сайта выполняется исключительно на стороне клиента (в вашем браузере). Мы не храним, не проверяем и не модерируем изображения, загружаемые пользователем.
|
|
|
|
| 328 |
<p><strong>4. Технические ограничения</strong><br>
|
| 329 |
Разработчик не гарантирует бесперебойную работу сайта, отсутствие программных ошибок или полную совместимость с конкретными устройствами и браузерами.</p>
|
| 330 |
|
| 331 |
+
<p><strong>5. Различия в законодательстве стран</strong><br>
|
| 332 |
+
Сайт доступен пользователям по всему миру. Пользователь признает, что законы, регулирующие авторское право, использование символики и распространение контента, могут существенно различаться в зависимости от юрисдикции. Пользователь самостоятельно несет ответственность за соблюдение законодательства страны своего проживания, а также законодательства стран, на территории ко��орых планируется использование созданных материалов. Разработчик не несет ответственности за нарушение пользователем локальных законов.</p>
|
| 333 |
+
|
| 334 |
<p>Используя данный сайт, вы выражаете свое полное согласие с вышеуказанными условиями.</p>
|
| 335 |
</div>
|
| 336 |
<button class="btn-primary" id="acceptBtn" style="margin-top: 20px;">Всё понятно</button>
|
|
|
|
| 395 |
|
| 396 |
function openModal() {
|
| 397 |
modalOverlay.style.display = 'flex';
|
|
|
|
| 398 |
setTimeout(() => modalOverlay.classList.add('active'), 10);
|
| 399 |
}
|
| 400 |
|
|
|
|
| 407 |
closeModalBtn.addEventListener('click', closeModal);
|
| 408 |
acceptBtn.addEventListener('click', closeModal);
|
| 409 |
|
|
|
|
| 410 |
modalOverlay.addEventListener('click', (e) => {
|
| 411 |
if (e.target === modalOverlay) closeModal();
|
| 412 |
});
|
|
|
|
| 439 |
}
|
| 440 |
});
|
| 441 |
|
|
|
|
| 442 |
dropZoneBase.addEventListener('click', () => fileInputBase.click());
|
| 443 |
dropZoneBase.addEventListener('dragover', (e) => { e.preventDefault(); dropZoneBase.classList.add('dragover'); });
|
| 444 |
dropZoneBase.addEventListener('dragleave', () => dropZoneBase.classList.remove('dragover'));
|
|
|
|
| 458 |
img.onload = () => {
|
| 459 |
baseLayer.type = 'image';
|
| 460 |
baseLayer.object = img;
|
| 461 |
+
textInput.value = '';
|
|
|
|
| 462 |
scaleRange.value = 100;
|
| 463 |
offsetXRange.value = 0;
|
| 464 |
offsetYRange.value = 0;
|
|
|
|
| 513 |
drawAll();
|
| 514 |
}
|
| 515 |
|
|
|
|
| 516 |
window.addEventListener('keydown', (e) => {
|
| 517 |
if ((e.key === 'Delete' || e.key === 'Backspace') && selectedStickerIndex !== -1) {
|
| 518 |
if (document.activeElement === textInput) return;
|
|
|
|
| 601 |
const halfW = w / 2;
|
| 602 |
const halfH = h / 2;
|
| 603 |
|
|
|
|
| 604 |
ctx.strokeStyle = '#FFFFFF';
|
| 605 |
ctx.lineWidth = 2;
|
| 606 |
ctx.setLineDash([5, 5]);
|
| 607 |
ctx.strokeRect(-halfW, -halfH, w, h);
|
| 608 |
|
|
|
|
| 609 |
ctx.setLineDash([]);
|
| 610 |
ctx.beginPath();
|
| 611 |
ctx.moveTo(0, -halfH);
|
| 612 |
ctx.lineTo(0, -halfH - 25);
|
| 613 |
ctx.stroke();
|
| 614 |
|
|
|
|
| 615 |
ctx.fillStyle = '#E13839';
|
| 616 |
ctx.beginPath();
|
| 617 |
ctx.arc(0, -halfH - 25, 8, 0, Math.PI * 2);
|
| 618 |
ctx.fill();
|
| 619 |
ctx.stroke();
|
| 620 |
|
|
|
|
| 621 |
ctx.beginPath();
|
| 622 |
ctx.arc(halfW, halfH, 8, 0, Math.PI * 2);
|
| 623 |
ctx.fill();
|
|
|
|
| 787 |
drawAll();
|
| 788 |
|
| 789 |
const link = document.createElement('a');
|
| 790 |
+
link.download = 'SWAGA_ICON.png'; // Убрано PRO
|
| 791 |
link.href = canvas.toDataURL('image/png');
|
| 792 |
link.click();
|
| 793 |
|