Платформа ProCharity - это место, где благотворительные фонды и волонтеры могут найти друг друга.
Сегодня фонды приходят на платформу ProCharity, чтобы познакомиться с интеллектуальными волонтерами, рассказать о крутых проектах со смыслом и найти профессионалов, которым доверят часть задач. Сотрудники фондов каждый день выполняют огромное количество задач, но зачастую им не хватает ресурсов и опытных специалистов.
Интеллектуальный волонтёр безвозмездно дарит фонду своё время и профессиональные навыки, позволяя решать задачи, которые трудно бывает закрыть силами штатных сотрудников. Он готов делиться умениями и опытом с благотворительными организациями и развиваться вместе с ними.
Фонды благодаря интеллектуальным волонтерам получают квалифицированную практическую помощь в решении накопившихся задач. Они готовы расширить свою сеть профессиональных контактов и передать накопившиеся нерешенные задачи тем, кто может справиться быстро, качественно и безвозмездно.
- Обновить страницу по регистрации волонтеров и фондов. Сделать ее интуитивно понятной, минимизировать риск ошибочной регистрации в не том кабинете;
- Обновить форму регистрации, форму заполнения личных данных волонтера, так чтобы этап заполнения был более приятный и менее утомительный для регистрирующегося;
- Повысить процент заполненности полей в профиле волонтера;
- Увеличить процент пользователей прошедших все этапы заполнения личных данных.
В соответствии с брифом логика валидации полей формы не реализовывалась.
По умолчанию стили и контейнеры для отображения ошибок в полях ввода скрыты.
Да стилизации поля как непрошедшего валидацию необходимо добавить класс .input__error
контейнеру .input
.
Для вывода сообщения об ошибке необходимо элементу .input__error-message
добавить
класс .input__error-message_visible
.
По умолчанию на странице в блоке .avatar
присутствует изображение и к контейнеру .avatar
применяются стили для
обработки состояния :hover
.
При клике на изображение будет открыто модальное окно редактирования аватара.
В случае отсутствия img
в контейнере .avatar
- стили :hover
для этого контейнера будут игнорироваться,
а пользователь увидит форму для выбора файла.
Скрытие кнопки удаления аватара никак не обработано и не зависит от наличия / отсутствия изображения аватара. Данную логику предполагается реализовать в процессе интеграции макета.
По умолчанию реализованы несколько дополнительных состояний элементов списка загруженных файлов, для реализации интерактивности: состояние процесса загрузки, состояние ошибки загрузки.
Для реализации состояния процесса загрузки файла на сервер необходимо элементу .uploader__file-preview-container
добавить модификатор uploader__file-preview-container_loading
Для стилизации элементов списка с ошибками, произошедщими во время загрузки,
необходимо элементу .uploader__item
добавить модификатор .uploader__item_error
.
В этом случае в контейнере предварительного просмотра файла будед отображена пиктограмма ошибки,
а элемент .uploader__error-message
, содержащий информацию об ошибке, будет вихуализирован.
Предварительно необходимо заполнить элемент .uploader__error-message
текстом соответствующей ошибки.
Для установки значения прогресс-бара заполненности профиля необходимо изменить
свойство width
элемента .progress-bar__scale
в необходимое процентное значение.
В проекте реализованы кастомные выпадающие списки select.
Для использования нового стилизованного поля необходимо:
- создать стандартный элемент
select
и вложить в него необходимое количество элементовoption
с обязательным указанием атрибута value и присвоением ему значения; - создать новый экземпляр класса CustomSelect, передав в него селектор ранее созданного элемента select.
Класс CustomSelect принимает один обязательный параметр - selector
(string) и один необязательный - options
(object)
. Объект options
принимает в калестве параметров имена классов для элементов кастомного списка, а также
параметр firstOptionIsTitle
.
Важно: по умолчанию параметр options.firstOptionIsTitle
установлен в значение true
, таким образом необходимо
учитывать, что первый элемент option
, разсещенный в select
будет являться заголовком поля и непосредственно в
выпадающий список не попадет.
С полным списком параметров можно ознакомиться в файле класса.
Процесс интеграции кастомных выпадающих списков с множественным выбором (multiselect) аналогичен процессу подключения обучных select, описанному выше, однако его использование имеет ряд отличий.
- Мультиселект, реализованный в проекте, по умолчанию предполагает работу с двухуровневыми списками, но имеет возможность расширения своего функционала для работы с неограниченной вложенностью;
- Для подключения кастомного мультиселекта необходимо создать экземпляр класса
CustomMultiselect
, обязательным параметром необходимо передать селектор элемента select, для которого инициализируется экземпляр. - Мультиселект корректно простраивает двухуровневый выпадающий список при условии, что для первого уровня вложенности
используются элементы
optgroup
с обязательным указанием атрибутаlegend
и присвоением ему значения; второй уроверь реализуется за счет элементовoption
, вложенных вopgroup
; - Элементы
optgroup
не доступны для выбора, как и в стандартном элементе sselect и отвечают лишь за группировку элементовoption
, которые, в свою очередь кликабельны и доступны для выбора.
Пример корректно сформированного select с атрибутом multiple
:
<select name="competencies" id="competencies" class="custom-select" multiple>
<option hidden>Выбрать</option>
<optgroup label="Дизайн и верстка">
<option value="Тестовый вариант 1">Тестовый вариант 1</option>
</optgroup>
<optgroup label="Маркетинг и коммуникации">
<option value="Социальные сети">Социальные сети</option>
<option value="Работа с текстами">Работа с текстами</option>
<option value="Email-рассылки">Email-рассылки</option>
<option value="Организация мероприятий">Организация мероприятий</option>
<option value="Реклама">Реклама</option>
<option value="Стратегический маркетинг / Другое">Стратегический маркетинг / Другое</option>
</optgroup>
<optgroup label="IT">
<option value="Тестовый вариант 2">Тестовый вариант 2</option>
</optgroup>
</select>
Пример инициализации класса CustomMultiselect:
new CustomMultiselect('#competencies').generate();
В проекте реализован функционал добавления / изменения / удаления аватара. Он обеспечивается классом Avatar
. Класс
имеет 2 обязательных параметра:
- первый - объект, содержащий 3 callback-функции, отвечающие за связку класса
Avatar
с другими классами, такими какCropper
иPopup
; - второй - объект с перечнем css-селекторов для доступа к элементам формы управления аватаром. Данные селекторы
определены непосредственно в классе
Avatar
, однако, в случае необходимости их можно переопределить при инициализации класса в index.js.
Для реализации изменения области видимости (обрезки) аватара в проекте использована библиотека cropperjs сайт, Github.
В проекте реализована функциональность загрузки файла аватара, выбора видимого фрагмента и предварительного просмтора результата.
Результат работы библиотеки, а именно URL-объект выбранной области аватара (изображение в формате .jpg) размещается в
скрытом поле .avatar__cropped-image-input
и доступен для дальнейшего использования и последующей загрузки на сервер.
Для получения параметров выделенной области изображения необходимо обратиться к методам экземпляра класса в соответствии с документацией. Инициализация библиотеки происходит в src/index.js
В проекте предусмотрена анимация для кнопки обновления профиля. В случае необходимости визуального информирования
пользователя об ожидании загрузки информации с сервера, необходимо добавить элементу .btn_type_refresh
класс-модификатор btn_type_refresh-process
. Пример работы кнопки с установленным модификатором расположен на странице
competencies.html
В проекте реализован функционал для отображения пароля в поле ввода. Его работу обеспечивает класс PwdViewer
.
Конструктор класса при создании экземпляра принимает два параметра:
fieldContainerElement
- (обяхательный параметр) - элемент контейнера-обертки для поля ввода пароля и кнопки управления видимостью;hideOnInputEvent
- (необязательный параметр, по умолчанию - true). Второй параметр отвечает за поведение поля ввода пароля. В случае, если значение установлено вtrue
- при наступлении события input, т.е. при любом изменении значения в поле, пароль в данном поле будет автоматически скрыт. Если второй параметр установлен вfalse
, то пароль будет видимым до повторного нажатия пользователем кнопки показать / скрыть пароль.
Будьте внимательны при внесении изменений в названия классов контейнеров / полей / кнопок или внесении изменений в структуру блоков! Обработчики очистки текстового содержимого полей и показа/скрытия пароля устанавливаются на контейнет-обертку полей и кнопок управления ими. Крайне не рекомендуется менять структуру блоков. В случае внесения изменений в имена CSS-классов, также необходимо внести соответствующие изменения в js-компоненты.