Synchronizes 72 lesson files across 5 languages (de, pl, es, ar, uk) to match the English source. This ensures code, solutions, and validations are identical while only title, description, task, and message fields are translated. Changes include: - Box model lessons (01-box-model.json) - Units and variables (05-units-variables.json) - Transitions and animations (06-transitions-animations.json) - Responsive design (08-responsive.json) - HTML elements (20-html-elements.json) - HTML forms basic and validation (21, 22) - HTML details/summary, progress/meter (23, 24) - HTML datalist, dialog, fieldset (25, 27, 28) - HTML tables and SVG (30, 32) - HTML marquee (31) - Welcome module (00-welcome.json) Fixes validation inconsistencies and removes extra content that exceeded English source. German translations were largely correct; Polish, Spanish, Arabic, and Ukrainian required full translations.
103 lines
6.5 KiB
JSON
103 lines
6.5 KiB
JSON
{
|
||
"$schema": "../../schemas/code-crispies-module-schema.json",
|
||
"id": "html-forms-basic",
|
||
"title": "HTML Форми",
|
||
"description": "Навчіться створювати форми з різними типами полів",
|
||
"mode": "html",
|
||
"difficulty": "beginner",
|
||
"lessons": [
|
||
{
|
||
"id": "form-structure",
|
||
"title": "Структура форми",
|
||
"description": "Кожна форма потребує обгортки <kbd><form></kbd>. Всередині використовуйте <kbd><label></kbd> для опису полів та <kbd><input></kbd> для введення даних.<br><br>Атрибут <kbd>for</kbd> у label має відповідати <kbd>id</kbd> полів для доступності.",
|
||
"task": "Створіть форму з:<br>1. <kbd><label></kbd> з текстом <code>Ім'я:</code> та атрибутом <kbd>for=\"name\"</kbd><br>2. Текстовим <kbd><input></kbd> з атрибутами <kbd>id=\"name\"</kbd> та <kbd>name=\"name\"</kbd>",
|
||
"previewHTML": "",
|
||
"previewBaseCSS": "body { font-family: system-ui; padding: 20px; } form { max-width: 300px; } label { display: block; margin-bottom: 5px; font-weight: 500; } input { width: 100%; padding: 8px; border: 1px solid #ccc; border-radius: 4px; box-sizing: border-box; }",
|
||
"sandboxCSS": "",
|
||
"initialCode": "",
|
||
"solution": "<form>\n <label for=\"name\">Ім'я:</label>\n <input type=\"text\" id=\"name\" name=\"name\">\n</form>",
|
||
"previewContainer": "preview-area",
|
||
"validations": [
|
||
{
|
||
"type": "element_exists",
|
||
"value": "form",
|
||
"message": "Оберніть все елементом <kbd><form></kbd>"
|
||
},
|
||
{
|
||
"type": "element_exists",
|
||
"value": "label",
|
||
"message": "Додайте <kbd><label></kbd> для вашого поля"
|
||
},
|
||
{
|
||
"type": "element_exists",
|
||
"value": "input",
|
||
"message": "Додайте елемент <kbd><input></kbd>"
|
||
},
|
||
{
|
||
"type": "attribute_value",
|
||
"value": { "selector": "label", "attr": "for", "value": null },
|
||
"message": "Додайте атрибут <kbd>for</kbd> до вашого label"
|
||
},
|
||
{
|
||
"type": "attribute_value",
|
||
"value": { "selector": "input", "attr": "id", "value": null },
|
||
"message": "Додайте атрибут <kbd>id</kbd> до вашого поля"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "input-types",
|
||
"title": "Типи полів",
|
||
"description": "Різні типи полів надають відповідні клавіатури та валідацію:<br><br><kbd>type=\"text\"</kbd> - Загальний текст<br><kbd>type=\"email\"</kbd> - Email з валідацією @<br><kbd>type=\"password\"</kbd> - Приховані символи<br><kbd>type=\"number\"</kbd> - Цифрова клавіатура<br><kbd>type=\"tel\"</kbd> - Телефонна клавіатура",
|
||
"task": "Створіть форму входу з двома полями:<br>1. Поле email: <kbd><label for=\"email\">Email:</label></kbd> та <kbd><input type=\"email\" id=\"email\"></kbd><br>2. Поле пароля: <kbd><label for=\"password\">Пароль:</label></kbd> та <kbd><input type=\"password\" id=\"password\"></kbd>",
|
||
"previewHTML": "",
|
||
"previewBaseCSS": "body { font-family: system-ui; padding: 20px; } form { max-width: 300px; } label { display: block; margin-top: 15px; margin-bottom: 5px; } label:first-child { margin-top: 0; } input { width: 100%; padding: 8px; border: 1px solid #ccc; border-radius: 4px; box-sizing: border-box; }",
|
||
"sandboxCSS": "",
|
||
"initialCode": "<form>\n \n</form>",
|
||
"solution": "<form>\n <label for=\"email\">Email:</label>\n <input type=\"email\" id=\"email\" name=\"email\">\n \n <label for=\"password\">Пароль:</label>\n <input type=\"password\" id=\"password\" name=\"password\">\n</form>",
|
||
"previewContainer": "preview-area",
|
||
"validations": [
|
||
{
|
||
"type": "element_exists",
|
||
"value": "input[type='email']",
|
||
"message": "Додайте поле з type=\"email\""
|
||
},
|
||
{
|
||
"type": "element_exists",
|
||
"value": "input[type='password']",
|
||
"message": "Додайте поле з type=\"password\""
|
||
},
|
||
{
|
||
"type": "element_count",
|
||
"value": { "selector": "label", "min": 2 },
|
||
"message": "Додайте label для обох полів"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "submit-button",
|
||
"title": "Кнопка відправки",
|
||
"description": "Форми потребують способу відправки даних. Використовуйте:<br><br><kbd><button type=\"submit\"></kbd> - Переважно, гнучкий вміст<br><kbd><input type=\"submit\"></kbd> - Простий текстовий кнопка<br><br>Текст кнопки має бути орієнтованим на дію (напр. <code>Увійти</code>, 'Зареєструватись', 'Надіслати').",
|
||
"task": "Додайте кнопку відправки до форми з текстом <code>Увійти</code>.",
|
||
"previewHTML": "",
|
||
"previewBaseCSS": "body { font-family: system-ui; padding: 20px; } form { max-width: 300px; } label { display: block; margin-top: 15px; margin-bottom: 5px; } label:first-child { margin-top: 0; } input { width: 100%; padding: 8px; border: 1px solid #ccc; border-radius: 4px; box-sizing: border-box; } button { width: 100%; margin-top: 20px; padding: 10px; background: #1976d2; color: white; border: none; border-radius: 4px; cursor: pointer; font-size: 16px; } button:hover { background: #1565c0; }",
|
||
"sandboxCSS": "",
|
||
"initialCode": "<form>\n <label for=\"email\">Email:</label>\n <input type=\"email\" id=\"email\">\n \n <label for=\"password\">Пароль:</label>\n <input type=\"password\" id=\"password\">\n \n</form>",
|
||
"solution": "<form>\n <label for=\"email\">Email:</label>\n <input type=\"email\" id=\"email\">\n \n <label for=\"password\">Пароль:</label>\n <input type=\"password\" id=\"password\">\n \n <button type=\"submit\">Увійти</button>\n</form>",
|
||
"previewContainer": "preview-area",
|
||
"validations": [
|
||
{
|
||
"type": "element_exists",
|
||
"value": "button[type='submit'], input[type='submit']",
|
||
"message": "Додайте кнопку відправки до форми"
|
||
},
|
||
{
|
||
"type": "element_text",
|
||
"value": { "selector": "button", "text": "Увійти" },
|
||
"message": "Кнопка має відображати <kbd>Увійти</kbd>"
|
||
}
|
||
]
|
||
}
|
||
]
|
||
}
|