SlideShare a Scribd company logo
1 of 35
Download to read offline
SVARX:
борьба с большими формами

Макс Ширшин
Руководитель группы разработки интерфейсов
Рекламных Технологий

Я.Субботник, Новосибирск, 19 ноября 2011
Большие формы
и клиентская валидация




2
Зачем нужна клиентская
валидация?
• защита от случайных ошибок

• пояснить суть ошибки, указать способ устранения

• плюс перезагрузка — минус конверсия :-(




3
4
Клиентская валидация
часто делается «на коленках»
    <form onsubmit=“if (!this.elements.email.value) return
    false; if (this.elements.firstname.value == ‘’ ||
    this.elements.secondname.value == ‘’) {alert(‘Укажите имя
    и фамилию’); return false}”>



    <script>
    $(function(){$(‘form’).eq(1).submit(function() {
      var eml = $(this).find(‘input[name=email]’).val();
      eml = $.trim(eml);
      var emlRe = /[wd]+[2,20]@[wd]+[2,20].w+[2,10]/;
      if (!emlRe.test(eml)) return false;
    });});
    </script>


5
Большие веб-формы —
большие ожидания
— менеджер хочет быстро
— пользователь хочет удобно
— дизайнер просит красиво
— коллеги ненавидят баги

6
По́том и кровью
выстраданные принципы:
• проверка может включать более одного поля

• валидация может зависеть от внешних условий

• тексты ошибок отделяем от самих правил

• правила удобно хранить отдельно

• препроцессинг данных — часть валидации

• нужен блочный формат

7
Что такое SVARX?




8
SVARX — это…
Semantical VAlidation Rulesets in XML
Готовая идеология работы с правилами валидации

Всё отдельно:

• Смысловые (семантические) правила

• Код, выполняющий проверки

• Тексты ошибок

• Способ реакции на ошибки
9
SVARX — это…
 Semantical VAlidation Rulesets in XML




Мухи — отдельно      Котлеты — отдельно


 10
SVARX

• human-readable XML-формат

• логика and-or-not, условные блоки if-then-else

• любые правила: встроенные и ваши собственные
                        new
• валидация по частям

• препроцессинг данных



11
И ещё...
...есть плагин для jQuery, который умеет:
                                             new
• читать SVARX-формат (XML или JSON bridge         )
• валидировать веб-формы

• интегрировать любые способы показа ошибок *

• добавлять пользовательские правила *

* внешнее API плагина

12
Как устроен SVARX-формат




13
Общая структура
 <svarx>
    <preprocess>
       <!–- правила
 препроцессинга -->
    </preprocess>

    <validate>
       <!–- правила валидации -->
    </validate>
 </svarx>

14
Каркас типичного правила
 <svarx>
    <preprocess>
       <!–- правила препроцессинга -->
    </preprocess>

     <validate>
        <rule
           for = “имя поля формы”
           type = “тип валидации”
           onerror = “идентификатор ошибки”
           ... доп. атрибуты правила
        />

    </validate>
 </svarx>
15
Простой пример
 <preprocess>
     <rule for=“age” type=“parseint” />
 </preprocess>
 <validate>
      <rule
          for=“age” type=“required”
          onerror=“age-not-specified” />
      <rule
          for=“age” type=“range”
              min=“14”
              max=“99”
          onerror=“age-incorrect” />
 </validate>



16
Составное правило
 <block logic=“and”
        onerror=“epic-fail”>
     <rule
         for=“user-email”
         type=“email” />
     <rule for=“age” type=“required” />
     <rule for=“age” type=“range”
         min=“14”
         max=“99” />
 </block>



17
Многоэлементное правило
 <rule type=“eq” comparison=“string”
       onerror=“fail”>
     <!–- сравниваем 2 значения -->
     <el name=“password1” />
     <el name=“password2” />

     <!–- опционально можем переопределять
          элемент, который будет target’ом
          svarx-ошибки -->
     <errtarget name=“password1” />
 </rule>



18
Условные проверки
 <block logic=“if”>
     <!–- IF-условие -->
     <rule for=“agreed” type=“checked” />
     <!–- THEN-условие -->
     <block onerror=“need_email”>
          <rule for=“email” type=“required” />
          <rule for=“email” type=“email” />
     </block>
     <!–- ELSE-условие (опционально) -->
     <block onerror=“tel_number_required”>
          <rule for=“tel” type=“required” />
     </block>
 </block>



19
Ещё вкусности
 <!–- отрицание NOT -->
 <rule for=“address” type=“regexp”
       match=“[A-Z]”
       inverted=“yes”
       onerror=“some-error” />

 <!–- выборка из одноимённых элементов -->
 <rule for=“address” type=“email”
      item=“0”
      onerror=“fail” />



20
Валидация по частям
 <!–- указываем id для правила или блока -->
 <rule for=“address” type=“regexp”
       match=“[A-Z]”
       id=“unique-id”
       onerror=“some-error” />


 // можно однократно вызвать проверку
 // одного правила или блока правил
 $('form').trigger(
     'myValidationEvent',
     [{validationBlockId: 'unique-id'}]
 );
21
Важные договорённости
• пустые элементы дают TRUE на любой проверке...

• ...кроме правила required

• несуществующие элементы дают TRUE на любой
  проверке

• условные проверки от несуществующих элементов
  пропускаются целиком (IF-THEN-ELSE)

• ...кроме случая, когда мы явно укажем обратное
  failifnull=“yes”

22
SVARX и JavaScript




23
Архитектура SVARX на клиенте
       SVARX XML
       Ajax

     jQuery plugin          Форма
       Данные об ошибках

     Visualization plugin


24
Подключение на проект
 <script type=“text/javascript”
   src=“jquery.svarx.js”></script>
 <script type=“text/javascript”
   src=“svarx.methods.messages.js”></script>
 <script type=“text/javascript”>
 $(function() {
   $(‘form’).svarx({
       svarxURL: ‘/validation/svarx.xml’,
       bindTo: ‘submit’,
       immutable: true
   });
 });
 </script>

25
Что такое «плагин визуализации»?
 $.fn.svarx.methods.messages = {
    before: function(e) {},
    after: function(e, result, eType) {
       if (!result && eType == ‘submit’) {
          e.preventDefault();
       }
    },
    error: function(e, id) {
       alert(‘Error ‘
          + id
          + ‘ at element ‘
          + e.target.name);
    }
 };

26
Что мы с этого имеем?




27
Плюсы
• set it and forget it

• перестаём писать JS-валидацию на коленках

• порою — вообще перестаём писать JS-валидацию

• все знания о валидации в одном файле

• правим отображение ошибок независимо
  от правил




28
Где уже применяется
http://sprav.yandex.ru

http://passport.yandex.ru

+ внутренние проекты Яндекса




29
To Do по состоянию на май 2011
• нет асинхронных проверок

• нет условий, не зависящих от состояния формы

• XML — not the way to go?

• скорость в IE

• нет «компиляции» SVARX XML в JS-код

• мало syntax sugar внутри самого формата


30
Сделано:
• нет асинхронных проверок
    доступно howto в документации
• нет условий, не зависящих от состояния формы
    поддержаны правила без привязки к элементам
• XML — not the way to go?
    создан JSON bridge для генерации правил из JSON
• скорость в IE
    система внутренних кешей
• нет «компиляции» SVARX XML в JS-код

• мало syntax sugar внутри самого формата


31
Где взять?




32
Исходный код:
     http://github.com/ingdir/svarx
Документация на русском:
     http://github.com/ingdir/svarx/docs
Twitter (анонсы, техподдержка):
     @svarx
Техподдержка:
     max.shirshin@yandex.ru

33
Вопросы?




34
Макс Ширшин
Руководитель группы разработки
интерфейсов Рекламных Технологий

ingdir@yandex-team.ru

More Related Content

What's hot

JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.Igor Shkulipa
 
М. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с CodeceptionМ. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с CodeceptionAlbina Tiupa
 
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов2ГИС Технологии
 
Михаил Боднарчук Современное функциональное тестирование с Codeception
Михаил Боднарчук Современное функциональное тестирование с CodeceptionМихаил Боднарчук Современное функциональное тестирование с Codeception
Михаил Боднарчук Современное функциональное тестирование с CodeceptionAlbina Tiupa
 
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evroneit-people
 
Как запилить 80 React форм и иногда бывать дома
Как запилить 80 React форм и иногда бывать домаКак запилить 80 React форм и иногда бывать дома
Как запилить 80 React форм и иногда бывать домаAndrew Smirnov
 
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)Ontico
 
VIQA - Тестирование UI с помощью Виртуального интеллекта
VIQA - Тестирование UI с помощью Виртуального интеллектаVIQA - Тестирование UI с помощью Виртуального интеллекта
VIQA - Тестирование UI с помощью Виртуального интеллектаSQALab
 
О чем мы забываем в QA или “Знакомьтесь – Manageability!”
О чем мы забываем в QA или “Знакомьтесь – Manageability!”О чем мы забываем в QA или “Знакомьтесь – Manageability!”
О чем мы забываем в QA или “Знакомьтесь – Manageability!”SQALab
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьCodeFest
 
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftwareКак сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftwareYandex
 
Человекопонятные отчёты
Человекопонятные отчётыЧеловекопонятные отчёты
Человекопонятные отчётыbearoff
 
Js templating stepan_reznikov
Js templating stepan_reznikovJs templating stepan_reznikov
Js templating stepan_reznikovyaevents
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.Igor Shkulipa
 
Svyatoslav Login "360 View of XSS"
Svyatoslav Login "360 View of XSS"Svyatoslav Login "360 View of XSS"
Svyatoslav Login "360 View of XSS"Fwdays
 
Рендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковРендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковDevDay
 
16 - Web-технологии. Технология AJAX
16 - Web-технологии. Технология AJAX16 - Web-технологии. Технология AJAX
16 - Web-технологии. Технология AJAXRoman Brovko
 
Selenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейSelenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейPaul Stashevsky
 

What's hot (19)

JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.
 
М. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с CodeceptionМ. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с Codeception
 
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
 
Михаил Боднарчук Современное функциональное тестирование с Codeception
Михаил Боднарчук Современное функциональное тестирование с CodeceptionМихаил Боднарчук Современное функциональное тестирование с Codeception
Михаил Боднарчук Современное функциональное тестирование с Codeception
 
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone
 
Как запилить 80 React форм и иногда бывать дома
Как запилить 80 React форм и иногда бывать домаКак запилить 80 React форм и иногда бывать дома
Как запилить 80 React форм и иногда бывать дома
 
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)
 
VIQA - Тестирование UI с помощью Виртуального интеллекта
VIQA - Тестирование UI с помощью Виртуального интеллектаVIQA - Тестирование UI с помощью Виртуального интеллекта
VIQA - Тестирование UI с помощью Виртуального интеллекта
 
О чем мы забываем в QA или “Знакомьтесь – Manageability!”
О чем мы забываем в QA или “Знакомьтесь – Manageability!”О чем мы забываем в QA или “Знакомьтесь – Manageability!”
О чем мы забываем в QA или “Знакомьтесь – Manageability!”
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесь
 
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftwareКак сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
 
VIQA Web UI Testing Tool
VIQA Web UI Testing ToolVIQA Web UI Testing Tool
VIQA Web UI Testing Tool
 
Человекопонятные отчёты
Человекопонятные отчётыЧеловекопонятные отчёты
Человекопонятные отчёты
 
Js templating stepan_reznikov
Js templating stepan_reznikovJs templating stepan_reznikov
Js templating stepan_reznikov
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.
 
Svyatoslav Login "360 View of XSS"
Svyatoslav Login "360 View of XSS"Svyatoslav Login "360 View of XSS"
Svyatoslav Login "360 View of XSS"
 
Рендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковРендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей Солодовников
 
16 - Web-технологии. Технология AJAX
16 - Web-технологии. Технология AJAX16 - Web-технологии. Технология AJAX
16 - Web-технологии. Технология AJAX
 
Selenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейSelenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностей
 

Viewers also liked

Александр Лившиц "Как работают хорошие сниппеты"
Александр Лившиц "Как работают хорошие сниппеты"Александр Лившиц "Как работают хорошие сниппеты"
Александр Лившиц "Как работают хорошие сниппеты"Yandex
 
Артём Кошелев "Чего не хватает в PageObject?"
Артём Кошелев "Чего не хватает в PageObject?"Артём Кошелев "Чего не хватает в PageObject?"
Артём Кошелев "Чего не хватает в PageObject?"Yandex
 
Вадим Пацев "Adobe Fireworks как инструмент для проектирования интерфейсов"
Вадим Пацев "Adobe Fireworks как инструмент для проектирования интерфейсов"Вадим Пацев "Adobe Fireworks как инструмент для проектирования интерфейсов"
Вадим Пацев "Adobe Fireworks как инструмент для проектирования интерфейсов"Yandex
 
Вера Лейзерович, Влад Мокеев "Виджеты для главной страницы Яндекса. Что такое...
Вера Лейзерович, Влад Мокеев "Виджеты для главной страницы Яндекса. Что такое...Вера Лейзерович, Влад Мокеев "Виджеты для главной страницы Яндекса. Что такое...
Вера Лейзерович, Влад Мокеев "Виджеты для главной страницы Яндекса. Что такое...Yandex
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Yandex
 
Анастасия Ларкина "Дизайнер в поиске"
Анастасия Ларкина "Дизайнер в поиске"Анастасия Ларкина "Дизайнер в поиске"
Анастасия Ларкина "Дизайнер в поиске"Yandex
 
Александр Садовский "Как получить больше трафика"
Александр Садовский "Как получить больше трафика"Александр Садовский "Как получить больше трафика"
Александр Садовский "Как получить больше трафика"Yandex
 
Алексей Андросов "HTML5 в Я.Почте"
Алексей Андросов "HTML5 в Я.Почте"Алексей Андросов "HTML5 в Я.Почте"
Алексей Андросов "HTML5 в Я.Почте"Yandex
 
Владимир Батыгин "Автоматический сбор данных по примерам"
Владимир Батыгин "Автоматический сбор данных по примерам"Владимир Батыгин "Автоматический сбор данных по примерам"
Владимир Батыгин "Автоматический сбор данных по примерам"Yandex
 
Антон Попов "Анализ эффективности сайтов: Яндекс.Метрика"
Антон Попов "Анализ эффективности сайтов: Яндекс.Метрика"Антон Попов "Анализ эффективности сайтов: Яндекс.Метрика"
Антон Попов "Анализ эффективности сайтов: Яндекс.Метрика"Yandex
 
Антон Волнухин и Роман Иванов "Как устроен Поиск по блогам"
Антон Волнухин и Роман Иванов "Как устроен Поиск по блогам"Антон Волнухин и Роман Иванов "Как устроен Поиск по блогам"
Антон Волнухин и Роман Иванов "Как устроен Поиск по блогам"Yandex
 
Антон Волнухин "Белорусская блогосфера"
Антон Волнухин "Белорусская блогосфера"Антон Волнухин "Белорусская блогосфера"
Антон Волнухин "Белорусская блогосфера"Yandex
 
Антон Тюрин "Распределённая система near-realtime агрегации больших объёмов д...
Антон Тюрин "Распределённая система near-realtime агрегации больших объёмов д...Антон Тюрин "Распределённая система near-realtime агрегации больших объёмов д...
Антон Тюрин "Распределённая система near-realtime агрегации больших объёмов д...Yandex
 
Сергей Пузанков — XSLT
Сергей Пузанков — XSLTСергей Пузанков — XSLT
Сергей Пузанков — XSLTYandex
 
Алексей Байтин, Алексей Осипенко "Проверка правописания в веб-приложениях"
Алексей Байтин, Алексей Осипенко "Проверка правописания в веб-приложениях"Алексей Байтин, Алексей Осипенко "Проверка правописания в веб-приложениях"
Алексей Байтин, Алексей Осипенко "Проверка правописания в веб-приложениях"Yandex
 
Варвара Степанова "БЭМ и JavaScript: Сборник рецептов"
Варвара Степанова "БЭМ и JavaScript: Сборник рецептов"Варвара Степанова "БЭМ и JavaScript: Сборник рецептов"
Варвара Степанова "БЭМ и JavaScript: Сборник рецептов"Yandex
 

Viewers also liked (16)

Александр Лившиц "Как работают хорошие сниппеты"
Александр Лившиц "Как работают хорошие сниппеты"Александр Лившиц "Как работают хорошие сниппеты"
Александр Лившиц "Как работают хорошие сниппеты"
 
Артём Кошелев "Чего не хватает в PageObject?"
Артём Кошелев "Чего не хватает в PageObject?"Артём Кошелев "Чего не хватает в PageObject?"
Артём Кошелев "Чего не хватает в PageObject?"
 
Вадим Пацев "Adobe Fireworks как инструмент для проектирования интерфейсов"
Вадим Пацев "Adobe Fireworks как инструмент для проектирования интерфейсов"Вадим Пацев "Adobe Fireworks как инструмент для проектирования интерфейсов"
Вадим Пацев "Adobe Fireworks как инструмент для проектирования интерфейсов"
 
Вера Лейзерович, Влад Мокеев "Виджеты для главной страницы Яндекса. Что такое...
Вера Лейзерович, Влад Мокеев "Виджеты для главной страницы Яндекса. Что такое...Вера Лейзерович, Влад Мокеев "Виджеты для главной страницы Яндекса. Что такое...
Вера Лейзерович, Влад Мокеев "Виджеты для главной страницы Яндекса. Что такое...
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»
 
Анастасия Ларкина "Дизайнер в поиске"
Анастасия Ларкина "Дизайнер в поиске"Анастасия Ларкина "Дизайнер в поиске"
Анастасия Ларкина "Дизайнер в поиске"
 
Александр Садовский "Как получить больше трафика"
Александр Садовский "Как получить больше трафика"Александр Садовский "Как получить больше трафика"
Александр Садовский "Как получить больше трафика"
 
Алексей Андросов "HTML5 в Я.Почте"
Алексей Андросов "HTML5 в Я.Почте"Алексей Андросов "HTML5 в Я.Почте"
Алексей Андросов "HTML5 в Я.Почте"
 
Владимир Батыгин "Автоматический сбор данных по примерам"
Владимир Батыгин "Автоматический сбор данных по примерам"Владимир Батыгин "Автоматический сбор данных по примерам"
Владимир Батыгин "Автоматический сбор данных по примерам"
 
Антон Попов "Анализ эффективности сайтов: Яндекс.Метрика"
Антон Попов "Анализ эффективности сайтов: Яндекс.Метрика"Антон Попов "Анализ эффективности сайтов: Яндекс.Метрика"
Антон Попов "Анализ эффективности сайтов: Яндекс.Метрика"
 
Антон Волнухин и Роман Иванов "Как устроен Поиск по блогам"
Антон Волнухин и Роман Иванов "Как устроен Поиск по блогам"Антон Волнухин и Роман Иванов "Как устроен Поиск по блогам"
Антон Волнухин и Роман Иванов "Как устроен Поиск по блогам"
 
Антон Волнухин "Белорусская блогосфера"
Антон Волнухин "Белорусская блогосфера"Антон Волнухин "Белорусская блогосфера"
Антон Волнухин "Белорусская блогосфера"
 
Антон Тюрин "Распределённая система near-realtime агрегации больших объёмов д...
Антон Тюрин "Распределённая система near-realtime агрегации больших объёмов д...Антон Тюрин "Распределённая система near-realtime агрегации больших объёмов д...
Антон Тюрин "Распределённая система near-realtime агрегации больших объёмов д...
 
Сергей Пузанков — XSLT
Сергей Пузанков — XSLTСергей Пузанков — XSLT
Сергей Пузанков — XSLT
 
Алексей Байтин, Алексей Осипенко "Проверка правописания в веб-приложениях"
Алексей Байтин, Алексей Осипенко "Проверка правописания в веб-приложениях"Алексей Байтин, Алексей Осипенко "Проверка правописания в веб-приложениях"
Алексей Байтин, Алексей Осипенко "Проверка правописания в веб-приложениях"
 
Варвара Степанова "БЭМ и JavaScript: Сборник рецептов"
Варвара Степанова "БЭМ и JavaScript: Сборник рецептов"Варвара Степанова "БЭМ и JavaScript: Сборник рецептов"
Варвара Степанова "БЭМ и JavaScript: Сборник рецептов"
 

Similar to Максим Ширшин "SVARX, или Борьба с большими формами"

Максим Ширшин "SVARX: фреймворк для семантической валидации форм"
Максим Ширшин "SVARX: фреймворк для семантической валидации форм"Максим Ширшин "SVARX: фреймворк для семантической валидации форм"
Максим Ширшин "SVARX: фреймворк для семантической валидации форм"Yandex
 
PHP Tricks
PHP TricksPHP Tricks
PHP TricksBlackFan
 
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»Yandex
 
Пластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьПластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьMoscow.pm
 
Knockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-ОнлайнKnockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-ОнлайнDevDay
 
Опыт разработки эффективного SPA
Опыт разработки эффективного SPAОпыт разработки эффективного SPA
Опыт разработки эффективного SPAEugene Abrosimov
 
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15MoscowJS
 
Как выглядит современный фронтенд
Как выглядит современный фронтендКак выглядит современный фронтенд
Как выглядит современный фронтендTimophy Chaptykov
 
Регрессионное тестирование верстки
Регрессионное тестирование версткиРегрессионное тестирование верстки
Регрессионное тестирование версткиTalks&Works
 
Тестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиТестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиZestranec
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCDevDay
 
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полнойОмские ИТ-субботники
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорьdrupalconf
 
I tmozg js_school
I tmozg js_schoolI tmozg js_school
I tmozg js_schoolITmozg
 
Александр Кашеверов - Коротко про WEB
Александр Кашеверов - Коротко про WEBАлександр Кашеверов - Коротко про WEB
Александр Кашеверов - Коротко про WEBDataArt
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов ИгорьPVasili
 
Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)Ontico
 
Waf.js: как защищать веб-приложения с использованием JavaScript
Waf.js: как защищать веб-приложения с использованием JavaScriptWaf.js: как защищать веб-приложения с использованием JavaScript
Waf.js: как защищать веб-приложения с использованием JavaScriptPositive Hack Days
 
React со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендерингReact со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендерингTimophy Chaptykov
 

Similar to Максим Ширшин "SVARX, или Борьба с большими формами" (20)

Максим Ширшин "SVARX: фреймворк для семантической валидации форм"
Максим Ширшин "SVARX: фреймворк для семантической валидации форм"Максим Ширшин "SVARX: фреймворк для семантической валидации форм"
Максим Ширшин "SVARX: фреймворк для семантической валидации форм"
 
PHP Tricks
PHP TricksPHP Tricks
PHP Tricks
 
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»
 
Пластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьПластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать жить
 
Knockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-ОнлайнKnockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-Онлайн
 
Опыт разработки эффективного SPA
Опыт разработки эффективного SPAОпыт разработки эффективного SPA
Опыт разработки эффективного SPA
 
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
 
Как выглядит современный фронтенд
Как выглядит современный фронтендКак выглядит современный фронтенд
Как выглядит современный фронтенд
 
Регрессионное тестирование верстки
Регрессионное тестирование версткиРегрессионное тестирование верстки
Регрессионное тестирование верстки
 
Тестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиТестирование программных фильтров безопасности
Тестирование программных фильтров безопасности
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
 
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорь
 
I tmozg js_school
I tmozg js_schoolI tmozg js_school
I tmozg js_school
 
Александр Кашеверов - Коротко про WEB
Александр Кашеверов - Коротко про WEBАлександр Кашеверов - Коротко про WEB
Александр Кашеверов - Коротко про WEB
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов Игорь
 
Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)
 
Waf.js: как защищать веб-приложения с использованием JavaScript
Waf.js: как защищать веб-приложения с использованием JavaScriptWaf.js: как защищать веб-приложения с использованием JavaScript
Waf.js: как защищать веб-приложения с использованием JavaScript
 
course js day 4
course js day 4course js day 4
course js day 4
 
React со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендерингReact со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендеринг
 

More from Yandex

Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksYandex
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Yandex
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаYandex
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаYandex
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Yandex
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Yandex
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Yandex
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Yandex
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Yandex
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Yandex
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Yandex
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Yandex
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровYandex
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Yandex
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Yandex
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Yandex
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Yandex
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Yandex
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Yandex
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Yandex
 

More from Yandex (20)

Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of Tanks
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
 

Максим Ширшин "SVARX, или Борьба с большими формами"

  • 1. SVARX: борьба с большими формами Макс Ширшин Руководитель группы разработки интерфейсов Рекламных Технологий Я.Субботник, Новосибирск, 19 ноября 2011
  • 3. Зачем нужна клиентская валидация? • защита от случайных ошибок • пояснить суть ошибки, указать способ устранения • плюс перезагрузка — минус конверсия :-( 3
  • 4. 4
  • 5. Клиентская валидация часто делается «на коленках» <form onsubmit=“if (!this.elements.email.value) return false; if (this.elements.firstname.value == ‘’ || this.elements.secondname.value == ‘’) {alert(‘Укажите имя и фамилию’); return false}”> <script> $(function(){$(‘form’).eq(1).submit(function() { var eml = $(this).find(‘input[name=email]’).val(); eml = $.trim(eml); var emlRe = /[wd]+[2,20]@[wd]+[2,20].w+[2,10]/; if (!emlRe.test(eml)) return false; });}); </script> 5
  • 6. Большие веб-формы — большие ожидания — менеджер хочет быстро — пользователь хочет удобно — дизайнер просит красиво — коллеги ненавидят баги 6
  • 7. По́том и кровью выстраданные принципы: • проверка может включать более одного поля • валидация может зависеть от внешних условий • тексты ошибок отделяем от самих правил • правила удобно хранить отдельно • препроцессинг данных — часть валидации • нужен блочный формат 7
  • 9. SVARX — это… Semantical VAlidation Rulesets in XML Готовая идеология работы с правилами валидации Всё отдельно: • Смысловые (семантические) правила • Код, выполняющий проверки • Тексты ошибок • Способ реакции на ошибки 9
  • 10. SVARX — это… Semantical VAlidation Rulesets in XML Мухи — отдельно Котлеты — отдельно 10
  • 11. SVARX • human-readable XML-формат • логика and-or-not, условные блоки if-then-else • любые правила: встроенные и ваши собственные new • валидация по частям • препроцессинг данных 11
  • 12. И ещё... ...есть плагин для jQuery, который умеет: new • читать SVARX-формат (XML или JSON bridge ) • валидировать веб-формы • интегрировать любые способы показа ошибок * • добавлять пользовательские правила * * внешнее API плагина 12
  • 14. Общая структура <svarx> <preprocess> <!–- правила препроцессинга --> </preprocess> <validate> <!–- правила валидации --> </validate> </svarx> 14
  • 15. Каркас типичного правила <svarx> <preprocess> <!–- правила препроцессинга --> </preprocess> <validate> <rule for = “имя поля формы” type = “тип валидации” onerror = “идентификатор ошибки” ... доп. атрибуты правила /> </validate> </svarx> 15
  • 16. Простой пример <preprocess> <rule for=“age” type=“parseint” /> </preprocess> <validate> <rule for=“age” type=“required” onerror=“age-not-specified” /> <rule for=“age” type=“range” min=“14” max=“99” onerror=“age-incorrect” /> </validate> 16
  • 17. Составное правило <block logic=“and” onerror=“epic-fail”> <rule for=“user-email” type=“email” /> <rule for=“age” type=“required” /> <rule for=“age” type=“range” min=“14” max=“99” /> </block> 17
  • 18. Многоэлементное правило <rule type=“eq” comparison=“string” onerror=“fail”> <!–- сравниваем 2 значения --> <el name=“password1” /> <el name=“password2” /> <!–- опционально можем переопределять элемент, который будет target’ом svarx-ошибки --> <errtarget name=“password1” /> </rule> 18
  • 19. Условные проверки <block logic=“if”> <!–- IF-условие --> <rule for=“agreed” type=“checked” /> <!–- THEN-условие --> <block onerror=“need_email”> <rule for=“email” type=“required” /> <rule for=“email” type=“email” /> </block> <!–- ELSE-условие (опционально) --> <block onerror=“tel_number_required”> <rule for=“tel” type=“required” /> </block> </block> 19
  • 20. Ещё вкусности <!–- отрицание NOT --> <rule for=“address” type=“regexp” match=“[A-Z]” inverted=“yes” onerror=“some-error” /> <!–- выборка из одноимённых элементов --> <rule for=“address” type=“email” item=“0” onerror=“fail” /> 20
  • 21. Валидация по частям <!–- указываем id для правила или блока --> <rule for=“address” type=“regexp” match=“[A-Z]” id=“unique-id” onerror=“some-error” /> // можно однократно вызвать проверку // одного правила или блока правил $('form').trigger( 'myValidationEvent', [{validationBlockId: 'unique-id'}] ); 21
  • 22. Важные договорённости • пустые элементы дают TRUE на любой проверке... • ...кроме правила required • несуществующие элементы дают TRUE на любой проверке • условные проверки от несуществующих элементов пропускаются целиком (IF-THEN-ELSE) • ...кроме случая, когда мы явно укажем обратное failifnull=“yes” 22
  • 24. Архитектура SVARX на клиенте SVARX XML Ajax jQuery plugin Форма Данные об ошибках Visualization plugin 24
  • 25. Подключение на проект <script type=“text/javascript” src=“jquery.svarx.js”></script> <script type=“text/javascript” src=“svarx.methods.messages.js”></script> <script type=“text/javascript”> $(function() { $(‘form’).svarx({ svarxURL: ‘/validation/svarx.xml’, bindTo: ‘submit’, immutable: true }); }); </script> 25
  • 26. Что такое «плагин визуализации»? $.fn.svarx.methods.messages = { before: function(e) {}, after: function(e, result, eType) { if (!result && eType == ‘submit’) { e.preventDefault(); } }, error: function(e, id) { alert(‘Error ‘ + id + ‘ at element ‘ + e.target.name); } }; 26
  • 27. Что мы с этого имеем? 27
  • 28. Плюсы • set it and forget it • перестаём писать JS-валидацию на коленках • порою — вообще перестаём писать JS-валидацию • все знания о валидации в одном файле • правим отображение ошибок независимо от правил 28
  • 30. To Do по состоянию на май 2011 • нет асинхронных проверок • нет условий, не зависящих от состояния формы • XML — not the way to go? • скорость в IE • нет «компиляции» SVARX XML в JS-код • мало syntax sugar внутри самого формата 30
  • 31. Сделано: • нет асинхронных проверок доступно howto в документации • нет условий, не зависящих от состояния формы поддержаны правила без привязки к элементам • XML — not the way to go? создан JSON bridge для генерации правил из JSON • скорость в IE система внутренних кешей • нет «компиляции» SVARX XML в JS-код • мало syntax sugar внутри самого формата 31
  • 33. Исходный код: http://github.com/ingdir/svarx Документация на русском: http://github.com/ingdir/svarx/docs Twitter (анонсы, техподдержка): @svarx Техподдержка: max.shirshin@yandex.ru 33
  • 35. Макс Ширшин Руководитель группы разработки интерфейсов Рекламных Технологий ingdir@yandex-team.ru