SlideShare a Scribd company logo
1 of 34
Download to read offline
Компонентная разработка на
Stylus, Jade, Typescript
Леонид Ширманов - MCT, MCPD
Agenda
• Бенефиты компонентной разработки на фронтенде
• Jade для HTML
• Stylus для CSS + Jeet + Rupture
• Typescript для JavaScript
• Выводы
Что имеем в виду под компонентой
• Компонента, контрол, блок/элемент в терминах Яндекс.БЭМ
• Суть в легко переиспользуемом фрагменте HTML/CSS/JS
• HTML/CSS/JS переиспользуются совместно
• Компоненты переиспользуются путем их размещения на
страницах
• Компоненты не знают о существовании друг друга на странице
В чем трудности
• Обычно мы делаем CSS, JS, HTML «модульным» по отдельности
• Принципы деления на модули различны
• JavaScript – CommonJS, AMD – requirejs, browserify и др.
• CSS – делим по файлам, испольуем LESS, SASS
• HTML – серверные контролы, клиентские шаблоны
• Backbone, Angular, Ember – это все об MVC – HTML, JS, без CSS
Как было бы удобно
Jade для HTML
http://jade-lang.com/
Jade для HTML
• Полноценный движок шаблонов с синтаксиcом на основе HAML
• Реализации для Node.js, Java, .NET (Spark), PHP, Ruby (wrapper)
• Есть все конструкции синтаксиса – условия, итерации, case
• Фильтры для компиляции фрагментов на другом языке
(markdown, coffee script etc)
• Мощное средство как server-side движок в рантайме
• Так почему он?
Jade для HTML
• Синтаксис HAML – визуально меньше текста, исключены ошибки
«забыли закрыть тег», «не туда вставили фрагмент» и т.п.
• Умеет компилировать статический html
• Mixins !
User.jade file
-- var user = { nickname: ‘Дамский угодник 1744' }
div.user
if user.nickname
h2 Ник-нейм:
p.nickname= user.nickname
else
h1 Ник-нейм:
p.nickname Ник-нейм не указан
User.html file
<div class="user">
<h2>Ник-нейм</h2>
<p class=“nickname">Дамский угодник 1744</p>
</div>
Jade mixin со строковым параметром
mixin article(title)
div.article
div.article-wrapper
h1= title
if block
block
else
p Статья не найдена
Jade mixin со строковым параметром
+article(‘Погода в Москве')
p Солнечно!
<div class="article">
<div class="article-wrapper">
<h1>Погода в Москве</h1>
<p>Солнечно!</p>
</div>
</div>
Jade для HTML
• Demo
Stylus для CSS
• Мощная альтернатива LESS и SASS
• Яндекс.Почта писали на Хабре причины перехода на Stylus http:
//habrahabr.ru/company/yandex/blog/169415/
• Mixins !
Имеет сногшибательные дополнения:
• Jeet (http://jeet.gs/)
• Rupture (http://jenius.github.io/rupture/)
Stylus mixin
rainbow(cssclass)
hr.{cssclass}:before
background linear-gradient(…)
position absolute
…
hr.{cssclass}:after
position absolute
…
Jeet для Stylus
Jeet mixins
• column() == col() -- column(1/4, offset: 1/4)
• span() -- span(1/4)
• center()
• stack()
• unstack()
• edit()
• alight()
• cf() -- clearfix
• shift()
• unshift()
Грид на Bootstrap-e
Rupture для Stylus
• Breakpoint Slicer - генерирует Media Queries
• http://jenius.github.io/rupture/
• переменная scale = 0 400px 600px 800px 1050px
Rupture - mixins для Stylus
• +above(measure)
• +from(measure)
• +below(measure)
• +to(measure)
• +between(measure, measure)
• +at(measure)
• +mobile() <= 400px
• +tablet() between 400px & 1050px
• +desktop() >= 1050px
• +retina() pixel density >= 1.5
Rupture - mixins для Stylus
https://github.com/lolmaus/breakpoint-slicer
Stylus для CSS
• Demo
Typescript для JavaScript
• http://www.typescriptlang.org/
• Привносит ООП в JavaScript – модули, классы, интерфейсы
• Типы, дженерики, enums
• Компилирует сразу в AMD или CommonJS модули
• Поддержка IDE – Visual Studio, WebStorm и др.
Недостатки Typescript
• Без использования ООП – не дает приемуществ
• ООП означает на все пишем классы и методы класса
• Для использования сторонних библиотек требуются Type
Definitions https://github.com/borisyankov/DefinitelyTyped
• jquery.d.ts, require.d.ts и т.д.
ООП в Typescript - классы
class User {
private name: string;
constructor(name: string) {
this.name = name;
}
public displayInHeader(): string {
return "Привет, " + this.name;
}
}
ООП в Typescript - классы
var currentUser = new User("Иван");
element.textContent = currentUser.displayInHeader();
Что-то не так...
ООП в Typescript - классы
class User {
private name: string;
constructor(name: string) {
this.name = name;
}
public displayInHeader(element: any): void {
var nameElement = ‘<span>Hello, ‘ + this.name + ‘</span>’;
$(element).append(nameElement);
}
}
ООП в Typescript - классы
var currentUser = new User("Иван");
currentUser.displayInHeader( $(‘selector’) );
Typescript для JavaScript
• Demo
Event Aggregator Pattern
• Паттерн описанный Мартином Фаулером в книге Patterns of
Enterprise Application Architecture
• http://martinfowler.com/eaaDev/EventAggregator.html
• Широко применяется в MVVM-фреймворках для десктопа
• Это реализация событий «на принципах» ООП
Event Aggregator Pattern
Event Aggregator Pattern
• Источники событий имеют ссылку на агрегатор и используют ее
для генерации событий
• Потребители событий имеют ссылку на агрегатор и
подписываются у него на оповещение о событиях
• Все объекты не знают друг о друге – знают только об агрегаторе
Event Aggregator Pattern
• Demo на Typescript
Заключение
• Комбинируйте технологии, библиотеки, фреймворки
• Ищите Ваш способ делать фронтенд компонентным и наработки
переиспользуемыми

More Related Content

What's hot

Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5Provectus
 
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаКолёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаITCrowd Almaty
 
Разработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаРазработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаendeveit
 
JavaScript завтра / Сергей Рубанов (Exante Limited)
JavaScript завтра / Сергей Рубанов  (Exante Limited)JavaScript завтра / Сергей Рубанов  (Exante Limited)
JavaScript завтра / Сергей Рубанов (Exante Limited)Ontico
 
nw.js введение в кросс-платформенные десктопные приложения на javascript (mo...
nw.js  введение в кросс-платформенные десктопные приложения на javascript (mo...nw.js  введение в кросс-платформенные десктопные приложения на javascript (mo...
nw.js введение в кросс-платформенные десктопные приложения на javascript (mo...Kirill Danilov
 
HTML GL - возьмите столько FPS, сколько вам нужно, и немного эффектов в прида...
HTML GL - возьмите столько FPS, сколько вам нужно, и немного эффектов в прида...HTML GL - возьмите столько FPS, сколько вам нужно, и немного эффектов в прида...
HTML GL - возьмите столько FPS, сколько вам нужно, и немного эффектов в прида...Ontico
 
Сборка проектов с помощью ENB
Сборка проектов с помощью ENBСборка проектов с помощью ENB
Сборка проектов с помощью ENBAleksandr Boichenko
 
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ..."nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...MoscowJS
 
Current State of Server Side JavaScript
Current State of Server Side JavaScriptCurrent State of Server Side JavaScript
Current State of Server Side JavaScriptOleg Podsechin
 
Chef, Puppet, Salt, Ansible on SECON 2014
Chef, Puppet, Salt, Ansible on SECON 2014Chef, Puppet, Salt, Ansible on SECON 2014
Chef, Puppet, Salt, Ansible on SECON 2014Alex Chistyakov
 
HTML5 Web Components: следующий шаг к модульности вашего проекта / Андрей Рах...
HTML5 Web Components: следующий шаг к модульности вашего проекта / Андрей Рах...HTML5 Web Components: следующий шаг к модульности вашего проекта / Андрей Рах...
HTML5 Web Components: следующий шаг к модульности вашего проекта / Андрей Рах...Ontico
 
#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко
#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко
#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил РеенкоJSib
 
10 вещей, которые «невозможно» сделать в iOS
10 вещей, которые «невозможно» сделать в iOS10 вещей, которые «невозможно» сделать в iOS
10 вещей, которые «невозможно» сделать в iOSAny Void
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...IT-Portfolio
 
Opensource на .NET
Opensource на .NETOpensource на .NET
Opensource на .NETlugnsk
 
Kolosov drupalconf2011 2_kolosov
Kolosov drupalconf2011 2_kolosovKolosov drupalconf2011 2_kolosov
Kolosov drupalconf2011 2_kolosovdrupalconf
 
История развития и применения CMS: Drupal и другие
История развития и применения CMS: Drupal и другиеИстория развития и применения CMS: Drupal и другие
История развития и применения CMS: Drupal и другиеlugnsk
 
Евгений Батовский, Николай Птущук "Современный станок верстальщика"
Евгений Батовский, Николай Птущук "Современный станок верстальщика"Евгений Батовский, Николай Птущук "Современный станок верстальщика"
Евгений Батовский, Николай Птущук "Современный станок верстальщика"Yandex
 
Какой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис ЦыплаковКакой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис ЦыплаковAlex Tumanoff
 

What's hot (20)

Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5
 
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаКолёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
 
Разработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаРазработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервиса
 
JavaScript завтра / Сергей Рубанов (Exante Limited)
JavaScript завтра / Сергей Рубанов  (Exante Limited)JavaScript завтра / Сергей Рубанов  (Exante Limited)
JavaScript завтра / Сергей Рубанов (Exante Limited)
 
nw.js введение в кросс-платформенные десктопные приложения на javascript (mo...
nw.js  введение в кросс-платформенные десктопные приложения на javascript (mo...nw.js  введение в кросс-платформенные десктопные приложения на javascript (mo...
nw.js введение в кросс-платформенные десктопные приложения на javascript (mo...
 
Chef @DevWeb
Chef @DevWebChef @DevWeb
Chef @DevWeb
 
HTML GL - возьмите столько FPS, сколько вам нужно, и немного эффектов в прида...
HTML GL - возьмите столько FPS, сколько вам нужно, и немного эффектов в прида...HTML GL - возьмите столько FPS, сколько вам нужно, и немного эффектов в прида...
HTML GL - возьмите столько FPS, сколько вам нужно, и немного эффектов в прида...
 
Сборка проектов с помощью ENB
Сборка проектов с помощью ENBСборка проектов с помощью ENB
Сборка проектов с помощью ENB
 
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ..."nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
 
Current State of Server Side JavaScript
Current State of Server Side JavaScriptCurrent State of Server Side JavaScript
Current State of Server Side JavaScript
 
Chef, Puppet, Salt, Ansible on SECON 2014
Chef, Puppet, Salt, Ansible on SECON 2014Chef, Puppet, Salt, Ansible on SECON 2014
Chef, Puppet, Salt, Ansible on SECON 2014
 
HTML5 Web Components: следующий шаг к модульности вашего проекта / Андрей Рах...
HTML5 Web Components: следующий шаг к модульности вашего проекта / Андрей Рах...HTML5 Web Components: следующий шаг к модульности вашего проекта / Андрей Рах...
HTML5 Web Components: следующий шаг к модульности вашего проекта / Андрей Рах...
 
#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко
#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко
#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко
 
10 вещей, которые «невозможно» сделать в iOS
10 вещей, которые «невозможно» сделать в iOS10 вещей, которые «невозможно» сделать в iOS
10 вещей, которые «невозможно» сделать в iOS
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
 
Opensource на .NET
Opensource на .NETOpensource на .NET
Opensource на .NET
 
Kolosov drupalconf2011 2_kolosov
Kolosov drupalconf2011 2_kolosovKolosov drupalconf2011 2_kolosov
Kolosov drupalconf2011 2_kolosov
 
История развития и применения CMS: Drupal и другие
История развития и применения CMS: Drupal и другиеИстория развития и применения CMS: Drupal и другие
История развития и применения CMS: Drupal и другие
 
Евгений Батовский, Николай Птущук "Современный станок верстальщика"
Евгений Батовский, Николай Птущук "Современный станок верстальщика"Евгений Батовский, Николай Птущук "Современный станок верстальщика"
Евгений Батовский, Николай Птущук "Современный станок верстальщика"
 
Какой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис ЦыплаковКакой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис Цыплаков
 

Viewers also liked

#10 "Опыт создания Real-time игры на WebGL, Angular, Socket.io и Node.js" Его...
#10 "Опыт создания Real-time игры на WebGL, Angular, Socket.io и Node.js" Его...#10 "Опыт создания Real-time игры на WebGL, Angular, Socket.io и Node.js" Его...
#10 "Опыт создания Real-time игры на WebGL, Angular, Socket.io и Node.js" Его...JSib
 
Сайт Москвы за 6 месяцев / Игорь Цупко (Notamedia)
Сайт Москвы за 6 месяцев / Игорь Цупко (Notamedia)Сайт Москвы за 6 месяцев / Игорь Цупко (Notamedia)
Сайт Москвы за 6 месяцев / Игорь Цупко (Notamedia)Ontico
 
Angular vs Angular 2 vs React. Сергей Александров
Angular vs Angular 2 vs React. Сергей АлександровAngular vs Angular 2 vs React. Сергей Александров
Angular vs Angular 2 vs React. Сергей АлександровEatDog
 
"Angular 2: Всех переиграл" Евгений Жарков
"Angular 2: Всех переиграл" Евгений Жарков"Angular 2: Всех переиграл" Евгений Жарков
"Angular 2: Всех переиграл" Евгений ЖарковFwdays
 
UXPeople 2015: Юрий Ветров — Платформенное мышление
UXPeople 2015: Юрий Ветров — Платформенное мышлениеUXPeople 2015: Юрий Ветров — Платформенное мышление
UXPeople 2015: Юрий Ветров — Платформенное мышлениеYury Vetrov
 
Актуальные технологии и тренды в веб-разработке
Актуальные технологии и тренды в веб-разработкеАктуальные технологии и тренды в веб-разработке
Актуальные технологии и тренды в веб-разработкеDenis Izmaylov
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинSergey Xek
 

Viewers also liked (7)

#10 "Опыт создания Real-time игры на WebGL, Angular, Socket.io и Node.js" Его...
#10 "Опыт создания Real-time игры на WebGL, Angular, Socket.io и Node.js" Его...#10 "Опыт создания Real-time игры на WebGL, Angular, Socket.io и Node.js" Его...
#10 "Опыт создания Real-time игры на WebGL, Angular, Socket.io и Node.js" Его...
 
Сайт Москвы за 6 месяцев / Игорь Цупко (Notamedia)
Сайт Москвы за 6 месяцев / Игорь Цупко (Notamedia)Сайт Москвы за 6 месяцев / Игорь Цупко (Notamedia)
Сайт Москвы за 6 месяцев / Игорь Цупко (Notamedia)
 
Angular vs Angular 2 vs React. Сергей Александров
Angular vs Angular 2 vs React. Сергей АлександровAngular vs Angular 2 vs React. Сергей Александров
Angular vs Angular 2 vs React. Сергей Александров
 
"Angular 2: Всех переиграл" Евгений Жарков
"Angular 2: Всех переиграл" Евгений Жарков"Angular 2: Всех переиграл" Евгений Жарков
"Angular 2: Всех переиграл" Евгений Жарков
 
UXPeople 2015: Юрий Ветров — Платформенное мышление
UXPeople 2015: Юрий Ветров — Платформенное мышлениеUXPeople 2015: Юрий Ветров — Платформенное мышление
UXPeople 2015: Юрий Ветров — Платформенное мышление
 
Актуальные технологии и тренды в веб-разработке
Актуальные технологии и тренды в веб-разработкеАктуальные технологии и тренды в веб-разработке
Актуальные технологии и тренды в веб-разработке
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только один
 

Similar to Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов

Работа со статикой в Django
Работа со статикой в DjangoРабота со статикой в Django
Работа со статикой в DjangoMoscowDjango
 
FrontTalks: Роман Дворнов (Ostrovok.ru), «Basis.js: почему я не бросил разраб...
FrontTalks: Роман Дворнов (Ostrovok.ru), «Basis.js: почему я не бросил разраб...FrontTalks: Роман Дворнов (Ostrovok.ru), «Basis.js: почему я не бросил разраб...
FrontTalks: Роман Дворнов (Ostrovok.ru), «Basis.js: почему я не бросил разраб...Yandex
 
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)Roman Dvornov
 
Bootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPressBootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPressIgor Sazonov
 
My Open Source (Sept 2017)
My Open Source (Sept 2017)My Open Source (Sept 2017)
My Open Source (Sept 2017)Roman Dvornov
 
DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"Roman Dvornov
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияYandex
 
Виталий Харисов "История создания БЭМ. Кратко, сбивчиво и неполно"
Виталий Харисов "История создания БЭМ. Кратко, сбивчиво и неполно"Виталий Харисов "История создания БЭМ. Кратко, сбивчиво и неполно"
Виталий Харисов "История создания БЭМ. Кратко, сбивчиво и неполно"Yandex
 
JavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in RussianJavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in RussianMikhail Davydov
 
Профилирование и оптимизация jQuery–кода
Профилирование и оптимизация jQuery–кодаПрофилирование и оптимизация jQuery–кода
Профилирование и оптимизация jQuery–кодаprivate_face
 
Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)
Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)
Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)Ontico
 
Корпоративное приложение на Rails
Корпоративное приложение на RailsКорпоративное приложение на Rails
Корпоративное приложение на RailsAndrei Kaleshka
 
разработка бизнес приложений (8)
разработка бизнес приложений (8)разработка бизнес приложений (8)
разработка бизнес приложений (8)Alexander Gornik
 
CSS глазами машин
CSS глазами машинCSS глазами машин
CSS глазами машинRoman Dvornov
 
Регрессионное тестирование верстки
Регрессионное тестирование версткиРегрессионное тестирование верстки
Регрессионное тестирование версткиTalks&Works
 
Робота з CSS. Методології, інструменти, оптимізація
Робота з CSS. Методології, інструменти, оптимізаціяРобота з CSS. Методології, інструменти, оптимізація
Робота з CSS. Методології, інструменти, оптимізаціяStfalcon Meetups
 
Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"Ontico
 

Similar to Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов (20)

Работа со статикой в Django
Работа со статикой в DjangoРабота со статикой в Django
Работа со статикой в Django
 
Js fuckworks
Js fuckworksJs fuckworks
Js fuckworks
 
Bootstrap 3
Bootstrap 3Bootstrap 3
Bootstrap 3
 
FrontTalks: Роман Дворнов (Ostrovok.ru), «Basis.js: почему я не бросил разраб...
FrontTalks: Роман Дворнов (Ostrovok.ru), «Basis.js: почему я не бросил разраб...FrontTalks: Роман Дворнов (Ostrovok.ru), «Basis.js: почему я не бросил разраб...
FrontTalks: Роман Дворнов (Ostrovok.ru), «Basis.js: почему я не бросил разраб...
 
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
 
Bootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPressBootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPress
 
My Open Source (Sept 2017)
My Open Source (Sept 2017)My Open Source (Sept 2017)
My Open Source (Sept 2017)
 
DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
 
Виталий Харисов "История создания БЭМ. Кратко, сбивчиво и неполно"
Виталий Харисов "История создания БЭМ. Кратко, сбивчиво и неполно"Виталий Харисов "История создания БЭМ. Кратко, сбивчиво и неполно"
Виталий Харисов "История создания БЭМ. Кратко, сбивчиво и неполно"
 
JavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in RussianJavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in Russian
 
Парсим CSS
Парсим CSSПарсим CSS
Парсим CSS
 
Профилирование и оптимизация jQuery–кода
Профилирование и оптимизация jQuery–кодаПрофилирование и оптимизация jQuery–кода
Профилирование и оптимизация jQuery–кода
 
Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)
Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)
Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)
 
Корпоративное приложение на Rails
Корпоративное приложение на RailsКорпоративное приложение на Rails
Корпоративное приложение на Rails
 
разработка бизнес приложений (8)
разработка бизнес приложений (8)разработка бизнес приложений (8)
разработка бизнес приложений (8)
 
CSS глазами машин
CSS глазами машинCSS глазами машин
CSS глазами машин
 
Регрессионное тестирование верстки
Регрессионное тестирование версткиРегрессионное тестирование верстки
Регрессионное тестирование верстки
 
Робота з CSS. Методології, інструменти, оптимізація
Робота з CSS. Методології, інструменти, оптимізаціяРобота з CSS. Методології, інструменти, оптимізація
Робота з CSS. Методології, інструменти, оптимізація
 
Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"
 

More from MoscowJS

Александр Русаков - TypeScript 2 in action
Александр Русаков - TypeScript 2 in actionАлександр Русаков - TypeScript 2 in action
Александр Русаков - TypeScript 2 in actionMoscowJS
 
Виктор Розаев - Как не сломать обратную совместимость в Public API
Виктор Розаев - Как не сломать обратную совместимость в Public APIВиктор Розаев - Как не сломать обратную совместимость в Public API
Виктор Розаев - Как не сломать обратную совместимость в Public APIMoscowJS
 
Favicon на стероидах
Favicon на стероидахFavicon на стероидах
Favicon на стероидахMoscowJS
 
E2E-тестирование мобильных приложений
E2E-тестирование мобильных приложенийE2E-тестирование мобильных приложений
E2E-тестирование мобильных приложенийMoscowJS
 
Reliable DOM testing with browser-monkey
Reliable DOM testing with browser-monkeyReliable DOM testing with browser-monkey
Reliable DOM testing with browser-monkeyMoscowJS
 
Basis.js - Production Ready SPA Framework
Basis.js - Production Ready SPA FrameworkBasis.js - Production Ready SPA Framework
Basis.js - Production Ready SPA FrameworkMoscowJS
 
Контекст в React, Николай Надоричев, MoscowJS 31
Контекст в React, Николай Надоричев, MoscowJS 31Контекст в React, Николай Надоричев, MoscowJS 31
Контекст в React, Николай Надоричев, MoscowJS 31MoscowJS
 
Верстка Canvas, Алексей Охрименко, MoscowJS 31
Верстка Canvas, Алексей Охрименко, MoscowJS 31Верстка Canvas, Алексей Охрименко, MoscowJS 31
Верстка Canvas, Алексей Охрименко, MoscowJS 31MoscowJS
 
Веб без интернет соединения, Михаил Дунаев, MoscowJS 31
Веб без интернет соединения, Михаил Дунаев, MoscowJS 31Веб без интернет соединения, Михаил Дунаев, MoscowJS 31
Веб без интернет соединения, Михаил Дунаев, MoscowJS 31MoscowJS
 
Angular2 Change Detection, Тимофей Яценко, MoscowJS 31
Angular2 Change Detection, Тимофей Яценко, MoscowJS 31Angular2 Change Detection, Тимофей Яценко, MoscowJS 31
Angular2 Change Detection, Тимофей Яценко, MoscowJS 31MoscowJS
 
Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33
Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33
Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33MoscowJS
 
Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33
Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33
Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33MoscowJS
 
Promise me an Image... Антон Корзунов, Яндекс, MoscowJs 33
Promise me an Image... Антон Корзунов, Яндекс, MoscowJs 33Promise me an Image... Антон Корзунов, Яндекс, MoscowJs 33
Promise me an Image... Антон Корзунов, Яндекс, MoscowJs 33MoscowJS
 
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...MoscowJS
 
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter..."Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...MoscowJS
 
"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29
"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29
"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29MoscowJS
 
"AMP - технология на три буквы", Макс Фролов, MoscowJS 29
"AMP - технология на три буквы", Макс Фролов, MoscowJS 29"AMP - технология на три буквы", Макс Фролов, MoscowJS 29
"AMP - технология на три буквы", Макс Фролов, MoscowJS 29MoscowJS
 
"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29
"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29
"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29MoscowJS
 
«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28
«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28
«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28MoscowJS
 
"Доклад не про React", Антон Виноградов, MoscowJS 27
"Доклад не про React", Антон Виноградов, MoscowJS 27"Доклад не про React", Антон Виноградов, MoscowJS 27
"Доклад не про React", Антон Виноградов, MoscowJS 27MoscowJS
 

More from MoscowJS (20)

Александр Русаков - TypeScript 2 in action
Александр Русаков - TypeScript 2 in actionАлександр Русаков - TypeScript 2 in action
Александр Русаков - TypeScript 2 in action
 
Виктор Розаев - Как не сломать обратную совместимость в Public API
Виктор Розаев - Как не сломать обратную совместимость в Public APIВиктор Розаев - Как не сломать обратную совместимость в Public API
Виктор Розаев - Как не сломать обратную совместимость в Public API
 
Favicon на стероидах
Favicon на стероидахFavicon на стероидах
Favicon на стероидах
 
E2E-тестирование мобильных приложений
E2E-тестирование мобильных приложенийE2E-тестирование мобильных приложений
E2E-тестирование мобильных приложений
 
Reliable DOM testing with browser-monkey
Reliable DOM testing with browser-monkeyReliable DOM testing with browser-monkey
Reliable DOM testing with browser-monkey
 
Basis.js - Production Ready SPA Framework
Basis.js - Production Ready SPA FrameworkBasis.js - Production Ready SPA Framework
Basis.js - Production Ready SPA Framework
 
Контекст в React, Николай Надоричев, MoscowJS 31
Контекст в React, Николай Надоричев, MoscowJS 31Контекст в React, Николай Надоричев, MoscowJS 31
Контекст в React, Николай Надоричев, MoscowJS 31
 
Верстка Canvas, Алексей Охрименко, MoscowJS 31
Верстка Canvas, Алексей Охрименко, MoscowJS 31Верстка Canvas, Алексей Охрименко, MoscowJS 31
Верстка Canvas, Алексей Охрименко, MoscowJS 31
 
Веб без интернет соединения, Михаил Дунаев, MoscowJS 31
Веб без интернет соединения, Михаил Дунаев, MoscowJS 31Веб без интернет соединения, Михаил Дунаев, MoscowJS 31
Веб без интернет соединения, Михаил Дунаев, MoscowJS 31
 
Angular2 Change Detection, Тимофей Яценко, MoscowJS 31
Angular2 Change Detection, Тимофей Яценко, MoscowJS 31Angular2 Change Detection, Тимофей Яценко, MoscowJS 31
Angular2 Change Detection, Тимофей Яценко, MoscowJS 31
 
Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33
Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33
Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33
 
Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33
Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33
Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33
 
Promise me an Image... Антон Корзунов, Яндекс, MoscowJs 33
Promise me an Image... Антон Корзунов, Яндекс, MoscowJs 33Promise me an Image... Антон Корзунов, Яндекс, MoscowJs 33
Promise me an Image... Антон Корзунов, Яндекс, MoscowJs 33
 
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
 
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter..."Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
 
"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29
"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29
"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29
 
"AMP - технология на три буквы", Макс Фролов, MoscowJS 29
"AMP - технология на три буквы", Макс Фролов, MoscowJS 29"AMP - технология на три буквы", Макс Фролов, MoscowJS 29
"AMP - технология на три буквы", Макс Фролов, MoscowJS 29
 
"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29
"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29
"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29
 
«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28
«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28
«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28
 
"Доклад не про React", Антон Виноградов, MoscowJS 27
"Доклад не про React", Антон Виноградов, MoscowJS 27"Доклад не про React", Антон Виноградов, MoscowJS 27
"Доклад не про React", Антон Виноградов, MoscowJS 27
 

Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов

  • 1. Компонентная разработка на Stylus, Jade, Typescript Леонид Ширманов - MCT, MCPD
  • 2. Agenda • Бенефиты компонентной разработки на фронтенде • Jade для HTML • Stylus для CSS + Jeet + Rupture • Typescript для JavaScript • Выводы
  • 3. Что имеем в виду под компонентой • Компонента, контрол, блок/элемент в терминах Яндекс.БЭМ • Суть в легко переиспользуемом фрагменте HTML/CSS/JS • HTML/CSS/JS переиспользуются совместно • Компоненты переиспользуются путем их размещения на страницах • Компоненты не знают о существовании друг друга на странице
  • 4. В чем трудности • Обычно мы делаем CSS, JS, HTML «модульным» по отдельности • Принципы деления на модули различны • JavaScript – CommonJS, AMD – requirejs, browserify и др. • CSS – делим по файлам, испольуем LESS, SASS • HTML – серверные контролы, клиентские шаблоны • Backbone, Angular, Ember – это все об MVC – HTML, JS, без CSS
  • 5. Как было бы удобно
  • 7. Jade для HTML • Полноценный движок шаблонов с синтаксиcом на основе HAML • Реализации для Node.js, Java, .NET (Spark), PHP, Ruby (wrapper) • Есть все конструкции синтаксиса – условия, итерации, case • Фильтры для компиляции фрагментов на другом языке (markdown, coffee script etc) • Мощное средство как server-side движок в рантайме • Так почему он?
  • 8. Jade для HTML • Синтаксис HAML – визуально меньше текста, исключены ошибки «забыли закрыть тег», «не туда вставили фрагмент» и т.п. • Умеет компилировать статический html • Mixins !
  • 9. User.jade file -- var user = { nickname: ‘Дамский угодник 1744' } div.user if user.nickname h2 Ник-нейм: p.nickname= user.nickname else h1 Ник-нейм: p.nickname Ник-нейм не указан
  • 10. User.html file <div class="user"> <h2>Ник-нейм</h2> <p class=“nickname">Дамский угодник 1744</p> </div>
  • 11. Jade mixin со строковым параметром mixin article(title) div.article div.article-wrapper h1= title if block block else p Статья не найдена
  • 12. Jade mixin со строковым параметром +article(‘Погода в Москве') p Солнечно! <div class="article"> <div class="article-wrapper"> <h1>Погода в Москве</h1> <p>Солнечно!</p> </div> </div>
  • 14. Stylus для CSS • Мощная альтернатива LESS и SASS • Яндекс.Почта писали на Хабре причины перехода на Stylus http: //habrahabr.ru/company/yandex/blog/169415/ • Mixins ! Имеет сногшибательные дополнения: • Jeet (http://jeet.gs/) • Rupture (http://jenius.github.io/rupture/)
  • 17. Jeet mixins • column() == col() -- column(1/4, offset: 1/4) • span() -- span(1/4) • center() • stack() • unstack() • edit() • alight() • cf() -- clearfix • shift() • unshift()
  • 19. Rupture для Stylus • Breakpoint Slicer - генерирует Media Queries • http://jenius.github.io/rupture/ • переменная scale = 0 400px 600px 800px 1050px
  • 20. Rupture - mixins для Stylus • +above(measure) • +from(measure) • +below(measure) • +to(measure) • +between(measure, measure) • +at(measure) • +mobile() <= 400px • +tablet() between 400px & 1050px • +desktop() >= 1050px • +retina() pixel density >= 1.5
  • 21. Rupture - mixins для Stylus https://github.com/lolmaus/breakpoint-slicer
  • 23. Typescript для JavaScript • http://www.typescriptlang.org/ • Привносит ООП в JavaScript – модули, классы, интерфейсы • Типы, дженерики, enums • Компилирует сразу в AMD или CommonJS модули • Поддержка IDE – Visual Studio, WebStorm и др.
  • 24. Недостатки Typescript • Без использования ООП – не дает приемуществ • ООП означает на все пишем классы и методы класса • Для использования сторонних библиотек требуются Type Definitions https://github.com/borisyankov/DefinitelyTyped • jquery.d.ts, require.d.ts и т.д.
  • 25. ООП в Typescript - классы class User { private name: string; constructor(name: string) { this.name = name; } public displayInHeader(): string { return "Привет, " + this.name; } }
  • 26. ООП в Typescript - классы var currentUser = new User("Иван"); element.textContent = currentUser.displayInHeader(); Что-то не так...
  • 27. ООП в Typescript - классы class User { private name: string; constructor(name: string) { this.name = name; } public displayInHeader(element: any): void { var nameElement = ‘<span>Hello, ‘ + this.name + ‘</span>’; $(element).append(nameElement); } }
  • 28. ООП в Typescript - классы var currentUser = new User("Иван"); currentUser.displayInHeader( $(‘selector’) );
  • 30. Event Aggregator Pattern • Паттерн описанный Мартином Фаулером в книге Patterns of Enterprise Application Architecture • http://martinfowler.com/eaaDev/EventAggregator.html • Широко применяется в MVVM-фреймворках для десктопа • Это реализация событий «на принципах» ООП
  • 32. Event Aggregator Pattern • Источники событий имеют ссылку на агрегатор и используют ее для генерации событий • Потребители событий имеют ссылку на агрегатор и подписываются у него на оповещение о событиях • Все объекты не знают друг о друге – знают только об агрегаторе
  • 33. Event Aggregator Pattern • Demo на Typescript
  • 34. Заключение • Комбинируйте технологии, библиотеки, фреймворки • Ищите Ваш способ делать фронтенд компонентным и наработки переиспользуемыми