# Блоки кода

**Блоков кода в конструкторе ещё нет.** Решение принято, правила зафиксированы,
код не написан.

Страница нужна сейчас потому, что от этих правил зависит, стоит ли рассчитывать
на блоки кода при выборе платформы, — и потому что одно из правил ограничивает
то, чего обычно ждут.

## Три блока, и они разные по опасности

**Блок HTML.** Произвольная разметка, выполняется как есть. Контексты: страница,
урок, виджет. В письмах и сообщениях — нет: там разметку определяет почта
и мессенджер, и произвольный HTML туда просто не доедет.

**Блок CSS.** Стили **автоматически ограничиваются документом, в котором стоят**.
Автору для этого ничего писать не надо — ограничение делает движок при сборке
страницы. Урок оформляет себя, а не соседний урок и не админку.

Границу с [темой школы](/appearance/themes/) стоит держать в голове: CSS-блок
оформляет свою страницу, тема оформляет всю школу. Страница, переоформившая
админку, — это дефект, а не возможность.

**Блок JavaScript.** Выполняется на странице, где стоит. Три ограничения, и они
не обсуждаются.

### Пользовательский код никогда не выполняется на экранах админки

Ни на одном. Предпросмотр внутри редактора рисуется во вложенном изолированном
кадре, который отдаётся отдельным путём и **без сессии администратора**.

Причина прямая: иначе техспециалист, написавший три строки в уроке, получает сессию
владельца школы. В продукте, который стоит у сотен клиентов, это вопрос времени,
а не вероятности.

### Право на код выдаётся отдельно

Отдельное право, по умолчанию только у владельца. Оно **не входит** в право
редактировать курс: редактировать курс и писать исполняемый код — разные полномочия.
На экране выдачи написано словами, что этот человек получит доступ к данным всех,
кто откроет страницу.

### Журнал правок и реестр вставок

Журнал — у всех трёх блоков: кто, когда, что было до, с откатом.

Реестр вставок — один экран, где видно **все места в школе**, где стоит
пользовательский код. Без него через полгода никто не помнит, откуда на странице
оплаты взялся чужой скрипт, и снять его боятся.

Отдельно: отзыв права на код **не выключает уже написанное**. Уволившийся
техспециалист перестаёт создавать и править, но его виджет продолжает работать —
иначе увольнение ломало бы продажи школы посреди дня. Вместо выключателя —
видимость: владелец получает список того, что этот человек создавал, и может
отключить сам, увидев предпросмотр изменений.

## Риск, названный прямо

Дав школе исполняемый код, мы отдаём ей часть ответственности за безопасность
её же учеников. Это сознательный размен: без блоков кода продукт не закрывает
работу технического специалиста, а именно он принимает решение о покупке.
Ограничения выше устроены так, чтобы **ошибка школы стоила школе, а не всем
установкам сразу**.

## Где следить

[Обновления](/changelog/).
