Работа с исходным кодом
на Платформе LP

Расширение стандартных возможностей

Редактирование HTML кода

Измененный HTML код будет отображаться прямо в редакторе, но из него будут удалены следующие теги:

iframe, frameset, frame, video, audio, bgsound, source, track, object, embed, applet, param, script, link, meta, title

В предпросмотре и в публикации все теги будут отображаться без изменений.

Так же стоит отменить, что комментарии вида <!--  --> будут приводить к ошибке. Это известная проблема.

Редактирование CSS кода

В отличии от HTML, из CSS ничего вырезаться не будет.

Во всех виджетах кроме HTML-виджета включена инкапсуляция стилей.

Это значит, что все стили могут применяться только к текущему виджету, и его дочерним виджетам.

Технически это сделано так. Допустим, вы написали следующий код:

.demo {
  font-size: 14px;
  border: 2px solid orange;
  padding: 10px;
}

Перед появление на странице он будет обработан, и добавлен будет в следующем виде:

#meta20 .demo {
  font-size: 14px;
  border: 2px solid orange;
  padding: 10px;
}

Где meta20 - уникальный id элемента, внутри которого расположен HTML код виджета.

Разные стили для разных размеров экрана

Для работы с адаптивностью стоит использовать классы screen-xs для телефонов, screen-sm для планшетов, screen-md для ноутбуков и screen-lg для широких экранов.

.screen-xs .demo { /* для телефонов */
  font-size: 14px;
}
.screen-sm .demo { /* для планшетов */
  font-size: 24px;
}
.screen-md .demo { /* для ноутбуков */
  font-size: 36px;
}
.screen-lg .demo { /* для широких экранов */
  font-size: 48px;
}

Главное, чтобы класс .screen-* был в начале селектора.

Компоненты

Компоненты позволяют интегрировать некоторые стандартные возможности редактора в ваш код.

Чтобы добавить компонент, в нужном месте HTML кода нужно вставить:

<component name="myname"></component>

Где myname - название компонента, данное ему при добавлении.

Редактируемый текст

Текст в этом компоненте редактируется по клику.

Если в коде встречается несколько компонентов с одним именем, то при изменении любого из них, все будут синхронизироваться.

Настраиваемая иконка

Иконка, которую так же можно изменить по клику.

Цвет иконки можно изменить, указав параметр color.

<component name="myname" color="black"></component>

Параметр color может принимать одно из следующих значений:

  • white - белый цвет
  • black - черный цвет
  • _textcolor - цвет текста. На светлом фоне будет темным, а на темном - белым.
  • Название переменной типа "Цвет" - об этом ниже.

Если в коде встречается несколько компонентов с одним именем, то при изменении любого из них, все будут синхронизироваться, но цвет у каждой иконки может быть свой уникальный.

Контейнер для виджетов

Контейнер, внутрь которого перетаскивающем можно вставлять виджеты Платформы.

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

Вот виджет в контейнере на белом фоне:

Hello, world! 

А вот виджет в контейнере на белом фоне:

Hello, world! 

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

Если цвет фона указан не в настройках стиля родительского виджета, а в CSS, то  виджет в контейнере не сумеет распознать цвет фона, и получится что-то такое:

Hello, world! 

Получается темный цвет на темном фоне. Многие виджеты, помимо текста, будут отображаться не правильно.

Hello, world! 

{dnn} :
{dl}
{hnn} :
{hl}
{mnn} :
{ml}
{snn} :
{sl}

Слайд 1

Слайд 2

Слайд 3

Слайд 4

Слайд 5

На этот случай у нас есть параметр colorside, который дает знать виджетам, на светлом(light) фоне они находятся, или на темном(dark).

Вот предыдущий пример, но с параметром colorside="dark":

<component name="myname" colorside="dark"></component>

Выглядит так:

Hello, world! 

{dnn} :
{dl}
{hnn} :
{hl}
{mnn} :
{ml}
{snn} :
{sl}

Слайд 1

Слайд 2

Слайд 3

Слайд 4

Слайд 5

Параметр colorside может принимать одно из следующих значений:

  • light - контейнер на светлом фоне
  • dark - контейнер на темном фоне
  • Свойство .colorside переменной с типом "Цвет". Об этом ниже.

Если в коде встречается несколько компонентов с одним именем, то все, кроме первого, будут удалены.

Важное замечениеСтоит избегать изменений свойств overflow, transform и стили текста (color, font-style и т.д.) если внутри элемента с этим свойством находится контейнер для виджетов.

Настройки

Настройки можно использовать как внутри HTML, так и внутри CSS кода.

Вставляются они с помощью фигурных скобок {{ }}:

<div class="{{ classname }}"></div>
.demo {
    border: {{ bordersize }}px solid {{ bordercolor }};
    text-align: {{ align }};
}

Внутри можно использовать математические операции и стандартные функции Javascript.

.demo {
    border-radius: {{ Math.min(100, radius * 10}}%;
}

Известная проблема: в HTML коде нельзя использовать вставки переменных в именах атрибутов. Такой код работать не будет:

<div {{ attrname }}="..."></div>

В HTML коде вставки использовать можно в именах тегов, содержимом атрибутов, в тексте. Внутри CSS ограничений никаких нет.

Работа с цветом

Цвета можно модифицировать.

Меняются отдельно каналы hue, saturation и lightness и alpha.

Полный набор функций:


Оттенок, HueНасыщенность, SaturationОсвещенность, LightnessПрозрачность, Alpha
Установитьh_sets_setl_seta_set
Увеличитьh_inc
s_incl_inca_inc
Уменьшитьh_dec
s_decl_deca_dec
Инвертироватьh_inv
s_invl_inva_inv

Все функции - установить (set), увеличить (inc), уменьшить (dec) и инвертировать (inv) работают одинаково со всеми каналами. Все они получают на вход число от 0 до 1.

Функция установить (set) задает значение канала.

Функции уменьшить (dec) и увеличить (inc) пропорционально уменьшают, или увеличивают значение канала.

Вот пример работы l_inc и l_dec

background-color: {{color.l_inc(1)}}
background-color: {{color.l_inc(0.8)}}
background-color: {{color.l_inc(0.6)}}
background-color: {{color.l_inc(0.4)}}
background-color: {{color.l_inc(0.2)}}
background-color: {{color}}
background-color: {{color.l_dec(0.2)}}
background-color: {{color.l_dec(0.4)}}
background-color: {{color.l_dec(0.6)}}
background-color: {{color.l_dec(0.8)}}
background-color: {{color.l_dec(1)}}

А вот пример работы s_inc и s_dec

background-color: {{color.s_inc(1)}}
background-color: {{color.s_inc(0.8)}}
background-color: {{color.s_inc(0.6)}}
background-color: {{color.s_inc(0.4)}}
background-color: {{color.s_inc(0.2)}}
background-color: {{color}}
background-color: {{color.s_dec(0.2)}}
background-color: {{color.s_dec(0.4)}}
background-color: {{color.s_dec(0.6)}}
background-color: {{color.s_dec(0.8)}}
background-color: {{color.s_dec(1)}}

Функция инвертировать (inv) увеличивает значение канала, если оно маленькое, и уменьшает, если оно большое.

Вот пример:

background-color: {{color.l_inc(1)}}; color: {{color.l_inc(1).l_inv(1)}}
background-color: {{color.l_inc(0.8)}}; color: {{color.l_inc(0.8).l_inv(1)}}
background-color: {{color.l_inc(0.6)}}; color: {{color.l_inc(0.6).l_inv(1)}}
background-color: {{color.l_inc(0.4)}}; color: {{color.l_inc(0.4).l_inv(1)}}
background-color: {{color.l_inc(0.2)}}; color: {{color.l_inc(0.2).l_inv(1)}}
background-color: {{color}}; color: {{color.l_inv(1)}}
background-color: {{color.l_dec(0.2)}}; color: {{color.l_dec(0.2).l_inv(1)}}
background-color: {{color.l_dec(0.4)}}; color: {{color.l_dec(0.4).l_inv(1)}}
background-color: {{color.l_dec(0.6)}}; color: {{color.l_dec(0.6).l_inv(1)}}
background-color: {{color.l_dec(0.8)}}; color: {{color.l_dec(0.8).l_inv(1)}}
background-color: {{color.l_dec(1)}}; color: {{color.l_dec(1).l_inv(1)}}

На примере выше мы сначала устанавливаем цвет фона, а затем устанавливаем цвет текста. Причем цвет текста - инвертированный цвет фона. И мы видим, что на темном фоне цвет текста белый, а на светлом - черный.

Так же у настроек цвета есть функция colorside(), которая возвращает "dark", если цвет темный, или "light", если цвет светлый. Это удобно для передачи в параметры иконок и контейнеров.

Переменная _textcolor

В _textcolor содержится цвет текста видждета. Эту переменную удобно использовать, когда необходимо сделать виджет, раскрашиваемый под цвет фона, как это делает текст.

С этой переменной можно работать так же, как и с любыми другими настройками типа Цвет.

Значение переменной определяется исходя из настроек фона виджета, и всех его родительских виджетов.

Виджет Спойлер

Функционал виджета Спойлер заключается в двух атрибутах.

plp-spoiler-container - элемент с этим атрибутом будет скрываться или показываться.

plp-spoiler-toggle - элемент с этим атрибутом по клику скрывает или показывает элемент с атрибутом plp-spoiler-container.

И plp-spoiler-container и plp-spoiler-toggle в зависимости от состояния будут иметь класс is-expanded или is-collapsed.

Верстка виджета при этом может быть произвольной. Элемент с атрибутами, указанными выше, могут располагаться в любом месте.

Вы можете сделать даже несколько элементов с атрибутом plp-spoiler-container и несколько с атрибутом plp-spoiler-toggle, и все будет работать.

Виджет Счетчик

Для работы виджета необходимо обозначит корневой элемент, который будет использоваться в качестве шаблона.

Для этого используется атрибут plp-countdown-root.

Далее, в коде виджета можно использовать заготовленные переменные для показа цифр.

Дни:

{{_dn}} - количество дней. Может быть 0, 4, 12, 143 и т.д.
{{_dnn}} - количество дней с двумя цифрами и больше. Может быть 00, 04, 143 и т.д.
{{_d1}} - цифра от 0 од 9, единицы дней. Это может быть "4" от "4" дней или "2" от "12" дней или "3" от "143" дней.
{{_d10}} - цифра от 0 од 9, десятки дней. Это может быть "0" от "4" дней или "1" от "12" дней или "4" от "143" дней.
{{_dl}} - текст "День", "Дней" или "Дня" в зависимости от количества дней.

Часы:
Те же переменные, что и в днях, но с "h" вместо "d".
{{_hn}}, {{_hnn}}, {{_h1}}, {{_h10}}, {{_hl}}

Минуты:
Те же переменные, что и в днях, но с "m" вместо "d".
{{_mn}}, {{_mnn}}, {{_m1}}, {{_m10}}, {{_ml}}

Секунды:
Те же переменные, что и в днях, но с "s" вместо "d".
{{_sn}}, {{_snn}}, {{_s1}}, {{_s10}}, {{_sl}}

Корректная работа динамических виджетов, таких как слайдер, видео и т.д., внутри элемента с атрибутом plp-countdown-root не гарантируется.

Виджет Слайдер

Элемент, в котором размещены слайды, помечается атрибутом plp-slider-container.

Кнопка перелистывание вперед помечается атрибутом plp-slider-previous.

Кнопка перелистывания назад помечается атрибутом plp-slider-next.

Чтобы сделать точки для каждого слайда необходимо использовать атрибут plp-slider-pagination. При том внутри элемента с этим атрибутом должен находиться всегда только 1 элемент с атрибутом plp-slider-page.

Пример:

<div plp-slider-pagination>
  <div plp-slider-page></div>
</div>

Для каждого слайда элемент plp-slider-page будет продублирован. Элемент, указывающий на активный слайд, будет иметь класс is-active.

Внутри plp-slider-page можно использовать произвольную верстку. Доступны так же следующие специальные элементы:

plp-slider-page_number - номер слайда

plp-slider-page_label - название слайда

plp-slider-page_icon - иконка слайда. Для указания цвета иконки используйте атрибут color.

Пример:

<div plp-slider-pagination>
  <div plp-slider-page>
    <div plp-slider-page_icon color="white"></div>
  </div>
</div>

Таким образом слайдер можно гибко настраивать.

Виджет Вкладки

Идентично виджету Слайдер, только в атрибутах вместо plp-slider-* нужно использовать plp-tabs-*.

Секция Слайдер

Идентично виджету Слайдер, только не используется элемент plp-slider-container.

При этом весь редактируемый HTML код помещен внутрь position:absolute элемента, растянутого по ширине и высоте всей секции.

Если нужно обратиться к CSS-свойствам слайда, можно использовать селектор .section-slider-container.

Виджет Меню-гамбургер

В виджете меню-гамбургер есть 3 ключевых элемента.

plp-hamburger-root - корневой элемент мобильного меню. Будет показан только на мобильных устройствах.

plp-hamburger-menu - элемент с меню. Не должен находиться внутри plp-hamburger-root. На мобильных устройствах будет скрываться или показываться по клику по plp-hamburger-toggle. На остальных устройствах будет всегда показан.

plp-hamburger-toggle - элемент с этим атрибутом по клику скрывает или показывает элемент с атрибутом plp-hamburger-menu.

Как и в спойлере, и plp-hamburger-menu и plp-hamburger-toggle в зависимости от состояния будут иметь класс is-expanded или is-collapsed.

Виджет Видео-кнопка

В виджете есть всего один элемент микро-разметки.

plp-video-button - элемент, по клику которого будет открываться окно с видео.

Автор: Вячеслав Гримальский, https://vk.com/grimalschi