SlideShare a Scribd company logo
1 of 35
광고네트워크플랫폼개발팀
젂 정호
더 나은 웹 표준을 위핚
web Components
Polymer.js
Polymer? Web Components?
• New type of library
• 기존 짂도, jQuery 컴포넌트와 기능상 비슷
• 컴포넌트를 만들어주는 기술
In 1990’s <Input>
<input type=“submit"></input>
<input type=“file"></input>
<input type=“password"></input>
<input type=“checkbox"></input>
<input type=“radio"></input>
In 1990’s <Select>
<select>
...
<option disabled>Medium</option>
<option disabled>Large</option>
<option selected>XX-large</option>
</select>
In 1990’s <Select>
<select size=“4” multiple>
<option>Do</option>
<option>Re</option>
<option>Mi</option>
…
</select>
In 1990’s <Select>
<select>
<optgroup label="German Cars">
<option>Mercedes</option>
<option>Audi</option>
</optgroup>
...
</select>
HTML SelectElement Spec
탭 이동 모듈을 구현해보자
그럼 지금은?
개별 라이브러리 개발 적용 시 학습 비용 증가
게다가 점점 복잡해지는 마크업 구조
이게 우리가 개발하는 방식인거죠
<select></select> 처럼
쉽고 간단하고 의미있고
이해하기 쉬운
엘레먼트로 표현하자
Web Components
Web Component의 구성
• Custom Elements
• Shadow DOM
• Template Tag
• HTML Import
Custom Elements
• 개발자가 직접 태그를 지정해 만들 수 있음
• 만들어짂 태그는 Native 태그처럼 동일하게 사용
• 기존 Native Tag를 확장해 사용핛 수 있음
• 이벤트 / 속성 추가
Custom Elements
[Element registration]
var XFooPrototype = Object.create(HTMLElement.prototype);
XFooPrototype.createdCallback = function() {
this.textContent = "I'm an x-foo!";
};
XFooPrototype.foo = function() {
console.log('foo() called');
};
var XFoo = document.registerElement(“x-foo”, { prototype:
XFooPrototype });
[Using a custom element]
1. <x-foo></x-foo>
2. var xFoo = new XFoo();
3. var xFoo = document.createElement(‘x-foo');
xFoo.foo(); // "foo() called"
Shadow DOM
• 대상 노드 하위에 숨겨져 있는 DOM subtree
• 일반적인 방법으로 내부 접근 불가
• Encapsulation
Shadow DOM
[Basic Usage]
<button>Hello, world!</button>
<script>
var elButton = document.querySelector(‚button‛);
var elShadowRoot = elButton.createShadowRoot();
elShadowRoot.textContent = ‚안녕하세요!‛;
</script>
<template></template>
• 마크업에서 템플릿을 표현
• 초기 페이지 로드 시 영향을 주지 않음
• 비 활성화된 재사용 가능핚 DOM chunk
• 사용되기 젂엔 스크립트, 이미지, 오디오 재생 안됨
<template></template>
<template>
<div>Template Sample</div>
<script>alert('Thanks!')</script>
</template>
<button onclick="useIt()">Use me</button>
<div id="container"></div>
<script>
function useIt() {
var content = document.querySelector('template').content;
document.querySelector('#container')
.appendChild(document.importNode(content.querySelector(‘sc
ript’), true)); }
</script>
HTML Import
• 다른 문서를 현재 문서에 포함시켜 재사용하는 방법
• 실제로 페이지 DOM에 포함되지 않음
• 페이지 자체를 다른 영역에 두고 관리
• HTML외에 CSS,JS도 가져올 수 있음
HTML Import
[main.html]
<head><link rel="import" href="warnings.html"></head>
<body><script>
var link = document.querySelector(‚link[rel="import"]‛);
var content = link.import; // Grab DOM from warning.html's
document.
var el = content.querySelector(“.warning”);
document.body.appendChild(el.cloneNode(true));
</script></body>
[warnings.html]
<div class="warning">
<style scoped> h3 { color: red; } </style>
<h3>Warning!</h3> <p>This page is under construction</p></div>
<div class="outdated"><h3>Heads up!</h3>
<p>This content may be out of date</p></div>
Web Component 예제
Custom Elements, Shadow DOM, Template Tag,
Lifecycle Callback을 활용핚 Web Component 예제
(DEMO)
하지만..
• Custom Elements
• Shadow DOM
• Template Tag
• HTML Import
=> (All X)
=> (Chrome,Opera O)
=> (IE X)
=> (All X)
Polymer.js
• Google 에서 개발핚 라이브러리
• Polyfill을 통핚 모든 브라우저에 사용 가능하도록 대응
• Web Component를 쉽게 사용하고 만들도록 도와줌
Polymer.js
EveryThing is an Element!
HTML is cool. DOM feels good.
- Polymer Elements
- Polymer UI Elements
Polymer Elements
• UI 렌더링을 하지 않는 유틸리티 엘레먼트
• 기능적인 요소를 담당
• ajax, jsonp, cookie, file, meta..
<polymer-ajax>
[HTML]
<polymer-ajax
url="http://gdata.youtube.com/feeds/api/videos/"
params='{"alt":"json"}'></polymer-ajax>
[JS]
var ajax = document.querySelector('polymer-ajax');
ajax.addEventListener('polymer-response',
function(e) {
console.log(JSON.parse(this.response).feed.entry);
});
ajax.go();
Polymer UI Elements
• 기본적인 UI 컴포넌트
• UI widget 등이 포함
• accordion, breadcrumbs, card, clock, dropdown..
Polymer UI Elements
• <polymer-ui-clock> (데모보기)
• <polymer-ui-card> (데모보기)
• <polymer-ui-accordion> (데모보기)
Custom elements with Polymer
<polymer-element name=“naver-search” attributes=“width
height”>
<template>
<input type=‚text‛
style=‚width:{{width}}px;height:{{height}}px‛ />
<button on-click=‚{{searchBtnClick}}‛>검색</button>
</template>
<script>
Polymer(‚naver-search‛, { width:150, height:30,
searchBtnClick: function(e) {…} });
</script>
</polymer-element>
<naver-search width=‚100‛></naver-search>
Why Polymer?
• 웹 페이지가 시멘틱해지고 단순해짐
• 모듈화가 잘 되어 있어 사용하기 쉽고 재사용의 이점
• 동작하는 영역이 분리되어 성능 좋음
• Light DOM을 이용, 웹 접근성이 좋음
• 근 미래에 컴포넌트의 표준이 될 가능성 높음
• Angular.js, Ember.js, Dart 에 차용될 예정
• 더 나은 웹 생태계를 위해 W3C 표준안으로 채택되도록
끊임없이 연구하고 푸시하는 중
• Experimental? But Web Evolution!!
• http://polymer-project.org
Future of Polymer.js
감사합니다!

More Related Content

What's hot

JavaSript Template Engine
JavaSript Template EngineJavaSript Template Engine
JavaSript Template EngineOhgyun Ahn
 
Angular2를 활용한 컴포넌트 중심의 개발
Angular2를 활용한 컴포넌트 중심의 개발Angular2를 활용한 컴포넌트 중심의 개발
Angular2를 활용한 컴포넌트 중심의 개발Jin wook
 
Resource Handling in Spring MVC
Resource Handling in Spring MVCResource Handling in Spring MVC
Resource Handling in Spring MVCArawn Park
 
간단한 블로그를 만들며 Django 이해하기
간단한 블로그를 만들며 Django 이해하기간단한 블로그를 만들며 Django 이해하기
간단한 블로그를 만들며 Django 이해하기Kyoung Up Jung
 
다시보는 Angular js
다시보는 Angular js다시보는 Angular js
다시보는 Angular jsJeado Ko
 
[하코사세미나] 한 시간 만에 배우는 Jquery
[하코사세미나] 한 시간 만에 배우는 Jquery[하코사세미나] 한 시간 만에 배우는 Jquery
[하코사세미나] 한 시간 만에 배우는 Jquery정석 양
 
AngularJS의 개발방식에 대하여
AngularJS의 개발방식에 대하여AngularJS의 개발방식에 대하여
AngularJS의 개발방식에 대하여Jin wook
 
Hacosa js study 4주차
Hacosa js study 4주차Hacosa js study 4주차
Hacosa js study 4주차Seong Bong Ji
 
Clean Front-End Development
Clean Front-End DevelopmentClean Front-End Development
Clean Front-End Development지수 윤
 
AngularJS In Production
AngularJS In ProductionAngularJS In Production
AngularJS In ProductionMooYeol Lee
 
Vuejs 시작하기
Vuejs 시작하기Vuejs 시작하기
Vuejs 시작하기성일 한
 
Front end dev 2016 & beyond
Front end dev 2016 & beyondFront end dev 2016 & beyond
Front end dev 2016 & beyondJae Sung Park
 
막하는 스터디 네 번째 만남 AngularJs (20151108)
막하는 스터디 네 번째 만남 AngularJs (20151108)막하는 스터디 네 번째 만남 AngularJs (20151108)
막하는 스터디 네 번째 만남 AngularJs (20151108)연웅 조
 
진짜기초 Node.js
진짜기초 Node.js진짜기초 Node.js
진짜기초 Node.jsWoo Jin Kim
 
정적 컨텐츠 제너레이터 GatsbyJS에 대해서 알아봅시다.
정적 컨텐츠 제너레이터 GatsbyJS에 대해서 알아봅시다.정적 컨텐츠 제너레이터 GatsbyJS에 대해서 알아봅시다.
정적 컨텐츠 제너레이터 GatsbyJS에 대해서 알아봅시다.Kenneth Ceyer
 
Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기Kyoung Up Jung
 
처음배우는 자바스크립트, 제이쿼리 #2
처음배우는 자바스크립트, 제이쿼리 #2처음배우는 자바스크립트, 제이쿼리 #2
처음배우는 자바스크립트, 제이쿼리 #2성일 한
 
Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.Kyoung Up Jung
 
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기Chang W. Doh
 

What's hot (20)

JavaSript Template Engine
JavaSript Template EngineJavaSript Template Engine
JavaSript Template Engine
 
Deview2013 track1 session7
Deview2013 track1 session7Deview2013 track1 session7
Deview2013 track1 session7
 
Angular2를 활용한 컴포넌트 중심의 개발
Angular2를 활용한 컴포넌트 중심의 개발Angular2를 활용한 컴포넌트 중심의 개발
Angular2를 활용한 컴포넌트 중심의 개발
 
Resource Handling in Spring MVC
Resource Handling in Spring MVCResource Handling in Spring MVC
Resource Handling in Spring MVC
 
간단한 블로그를 만들며 Django 이해하기
간단한 블로그를 만들며 Django 이해하기간단한 블로그를 만들며 Django 이해하기
간단한 블로그를 만들며 Django 이해하기
 
다시보는 Angular js
다시보는 Angular js다시보는 Angular js
다시보는 Angular js
 
[하코사세미나] 한 시간 만에 배우는 Jquery
[하코사세미나] 한 시간 만에 배우는 Jquery[하코사세미나] 한 시간 만에 배우는 Jquery
[하코사세미나] 한 시간 만에 배우는 Jquery
 
AngularJS의 개발방식에 대하여
AngularJS의 개발방식에 대하여AngularJS의 개발방식에 대하여
AngularJS의 개발방식에 대하여
 
Hacosa js study 4주차
Hacosa js study 4주차Hacosa js study 4주차
Hacosa js study 4주차
 
Clean Front-End Development
Clean Front-End DevelopmentClean Front-End Development
Clean Front-End Development
 
AngularJS In Production
AngularJS In ProductionAngularJS In Production
AngularJS In Production
 
Vuejs 시작하기
Vuejs 시작하기Vuejs 시작하기
Vuejs 시작하기
 
Front end dev 2016 & beyond
Front end dev 2016 & beyondFront end dev 2016 & beyond
Front end dev 2016 & beyond
 
막하는 스터디 네 번째 만남 AngularJs (20151108)
막하는 스터디 네 번째 만남 AngularJs (20151108)막하는 스터디 네 번째 만남 AngularJs (20151108)
막하는 스터디 네 번째 만남 AngularJs (20151108)
 
진짜기초 Node.js
진짜기초 Node.js진짜기초 Node.js
진짜기초 Node.js
 
정적 컨텐츠 제너레이터 GatsbyJS에 대해서 알아봅시다.
정적 컨텐츠 제너레이터 GatsbyJS에 대해서 알아봅시다.정적 컨텐츠 제너레이터 GatsbyJS에 대해서 알아봅시다.
정적 컨텐츠 제너레이터 GatsbyJS에 대해서 알아봅시다.
 
Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기
 
처음배우는 자바스크립트, 제이쿼리 #2
처음배우는 자바스크립트, 제이쿼리 #2처음배우는 자바스크립트, 제이쿼리 #2
처음배우는 자바스크립트, 제이쿼리 #2
 
Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.
 
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기
 

Viewers also liked

Nhn coding conventions_for_markup_languages
Nhn coding conventions_for_markup_languagesNhn coding conventions_for_markup_languages
Nhn coding conventions_for_markup_languagesHyunmin Lim
 
FT직군의 현재와 미래 - 홍윤표
FT직군의 현재와 미래 - 홍윤표FT직군의 현재와 미래 - 홍윤표
FT직군의 현재와 미래 - 홍윤표Daum DNA
 
웹접근성과 장애인 차별 금지법 - 장성민
웹접근성과 장애인 차별 금지법 - 장성민웹접근성과 장애인 차별 금지법 - 장성민
웹접근성과 장애인 차별 금지법 - 장성민Daum DNA
 
반응형 웹 디자인은 만능인가? - 신현석
반응형 웹 디자인은 만능인가? - 신현석반응형 웹 디자인은 만능인가? - 신현석
반응형 웹 디자인은 만능인가? - 신현석Daum DNA
 

Viewers also liked (6)

Nhn coding conventions_for_markup_languages
Nhn coding conventions_for_markup_languagesNhn coding conventions_for_markup_languages
Nhn coding conventions_for_markup_languages
 
FT직군의 현재와 미래 - 홍윤표
FT직군의 현재와 미래 - 홍윤표FT직군의 현재와 미래 - 홍윤표
FT직군의 현재와 미래 - 홍윤표
 
웹접근성과 장애인 차별 금지법 - 장성민
웹접근성과 장애인 차별 금지법 - 장성민웹접근성과 장애인 차별 금지법 - 장성민
웹접근성과 장애인 차별 금지법 - 장성민
 
반응형 웹 디자인은 만능인가? - 신현석
반응형 웹 디자인은 만능인가? - 신현석반응형 웹 디자인은 만능인가? - 신현석
반응형 웹 디자인은 만능인가? - 신현석
 
Github basics
Github basicsGithub basics
Github basics
 
reveal.js 3.0.0
reveal.js 3.0.0reveal.js 3.0.0
reveal.js 3.0.0
 

Similar to 더 나은 웹표준을 위한 Web Components

Html5 시맨틱태그
Html5 시맨틱태그Html5 시맨틱태그
Html5 시맨틱태그은심 강
 
2. html5 시맨틱태그
2. html5 시맨틱태그2. html5 시맨틱태그
2. html5 시맨틱태그은심 강
 
2. html5 시맨틱태그
2. html5 시맨틱태그2. html5 시맨틱태그
2. html5 시맨틱태그은심 강
 
응답하라 반응형웹 - 3. bootstrap
응답하라 반응형웹 - 3. bootstrap응답하라 반응형웹 - 3. bootstrap
응답하라 반응형웹 - 3. bootstrapredribbon1307
 
Html5 앱과 웹사이트를 보다 빠르게 하는 50가지
Html5 앱과 웹사이트를 보다 빠르게 하는 50가지Html5 앱과 웹사이트를 보다 빠르게 하는 50가지
Html5 앱과 웹사이트를 보다 빠르게 하는 50가지yongwoo Jeon
 
웹 표준의 미래- HTML5 (2006)
웹 표준의 미래- HTML5 (2006)웹 표준의 미래- HTML5 (2006)
웹 표준의 미래- HTML5 (2006)Channy Yun
 
Web Standards HTML5_CSS3
Web Standards HTML5_CSS3Web Standards HTML5_CSS3
Web Standards HTML5_CSS3Eulsoo Jung
 
Ionic으로 모바일앱 만들기 #2
Ionic으로 모바일앱 만들기 #2Ionic으로 모바일앱 만들기 #2
Ionic으로 모바일앱 만들기 #2성일 한
 
웹성능최적화 20130405
웹성능최적화 20130405웹성능최적화 20130405
웹성능최적화 20130405주형 전
 
Dreamweaver CS5.5 를 이용한 jQueryMobile 개발
Dreamweaver CS5.5 를 이용한 jQueryMobile 개발Dreamweaver CS5.5 를 이용한 jQueryMobile 개발
Dreamweaver CS5.5 를 이용한 jQueryMobile 개발JongKwang Kim
 
처음부터 다시 배우는 HTML5 & CSS3 강의자료 4일차
처음부터 다시 배우는 HTML5 & CSS3 강의자료 4일차처음부터 다시 배우는 HTML5 & CSS3 강의자료 4일차
처음부터 다시 배우는 HTML5 & CSS3 강의자료 4일차Michael Yang
 
Modern web application with meteor
Modern web application with meteorModern web application with meteor
Modern web application with meteorJaeho Lee
 
Meteor React Tutorial 따라하기
Meteor React Tutorial 따라하기Meteor React Tutorial 따라하기
Meteor React Tutorial 따라하기Jiam Seo
 
조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]
조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]
조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]WSConf.
 

Similar to 더 나은 웹표준을 위한 Web Components (20)

Html5 시맨틱태그
Html5 시맨틱태그Html5 시맨틱태그
Html5 시맨틱태그
 
Hacosa jquery 1th
Hacosa jquery 1thHacosa jquery 1th
Hacosa jquery 1th
 
웹표준 교육
웹표준 교육웹표준 교육
웹표준 교육
 
2. html5 시맨틱태그
2. html5 시맨틱태그2. html5 시맨틱태그
2. html5 시맨틱태그
 
2. html5 시맨틱태그
2. html5 시맨틱태그2. html5 시맨틱태그
2. html5 시맨틱태그
 
응답하라 반응형웹 - 3. bootstrap
응답하라 반응형웹 - 3. bootstrap응답하라 반응형웹 - 3. bootstrap
응답하라 반응형웹 - 3. bootstrap
 
Html5 앱과 웹사이트를 보다 빠르게 하는 50가지
Html5 앱과 웹사이트를 보다 빠르게 하는 50가지Html5 앱과 웹사이트를 보다 빠르게 하는 50가지
Html5 앱과 웹사이트를 보다 빠르게 하는 50가지
 
웹 표준의 미래- HTML5 (2006)
웹 표준의 미래- HTML5 (2006)웹 표준의 미래- HTML5 (2006)
웹 표준의 미래- HTML5 (2006)
 
Web Standards HTML5_CSS3
Web Standards HTML5_CSS3Web Standards HTML5_CSS3
Web Standards HTML5_CSS3
 
HTML5 & CSS3
HTML5 & CSS3HTML5 & CSS3
HTML5 & CSS3
 
Ionic으로 모바일앱 만들기 #2
Ionic으로 모바일앱 만들기 #2Ionic으로 모바일앱 만들기 #2
Ionic으로 모바일앱 만들기 #2
 
웹성능최적화 20130405
웹성능최적화 20130405웹성능최적화 20130405
웹성능최적화 20130405
 
Html5
Html5 Html5
Html5
 
2 1. html4.01
2 1. html4.012 1. html4.01
2 1. html4.01
 
Dreamweaver CS5.5 를 이용한 jQueryMobile 개발
Dreamweaver CS5.5 를 이용한 jQueryMobile 개발Dreamweaver CS5.5 를 이용한 jQueryMobile 개발
Dreamweaver CS5.5 를 이용한 jQueryMobile 개발
 
Meteor2015 codelab
Meteor2015 codelab Meteor2015 codelab
Meteor2015 codelab
 
처음부터 다시 배우는 HTML5 & CSS3 강의자료 4일차
처음부터 다시 배우는 HTML5 & CSS3 강의자료 4일차처음부터 다시 배우는 HTML5 & CSS3 강의자료 4일차
처음부터 다시 배우는 HTML5 & CSS3 강의자료 4일차
 
Modern web application with meteor
Modern web application with meteorModern web application with meteor
Modern web application with meteor
 
Meteor React Tutorial 따라하기
Meteor React Tutorial 따라하기Meteor React Tutorial 따라하기
Meteor React Tutorial 따라하기
 
조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]
조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]
조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]
 

더 나은 웹표준을 위한 Web Components

  • 1. 광고네트워크플랫폼개발팀 젂 정호 더 나은 웹 표준을 위핚 web Components Polymer.js
  • 2. Polymer? Web Components? • New type of library • 기존 짂도, jQuery 컴포넌트와 기능상 비슷 • 컴포넌트를 만들어주는 기술
  • 3.
  • 4. In 1990’s <Input> <input type=“submit"></input> <input type=“file"></input> <input type=“password"></input> <input type=“checkbox"></input> <input type=“radio"></input>
  • 5. In 1990’s <Select> <select> ... <option disabled>Medium</option> <option disabled>Large</option> <option selected>XX-large</option> </select>
  • 6. In 1990’s <Select> <select size=“4” multiple> <option>Do</option> <option>Re</option> <option>Mi</option> … </select>
  • 7. In 1990’s <Select> <select> <optgroup label="German Cars"> <option>Mercedes</option> <option>Audi</option> </optgroup> ... </select>
  • 9. 탭 이동 모듈을 구현해보자 그럼 지금은? 개별 라이브러리 개발 적용 시 학습 비용 증가
  • 11. 이게 우리가 개발하는 방식인거죠
  • 12. <select></select> 처럼 쉽고 간단하고 의미있고 이해하기 쉬운 엘레먼트로 표현하자 Web Components
  • 13. Web Component의 구성 • Custom Elements • Shadow DOM • Template Tag • HTML Import
  • 14. Custom Elements • 개발자가 직접 태그를 지정해 만들 수 있음 • 만들어짂 태그는 Native 태그처럼 동일하게 사용 • 기존 Native Tag를 확장해 사용핛 수 있음 • 이벤트 / 속성 추가
  • 15. Custom Elements [Element registration] var XFooPrototype = Object.create(HTMLElement.prototype); XFooPrototype.createdCallback = function() { this.textContent = "I'm an x-foo!"; }; XFooPrototype.foo = function() { console.log('foo() called'); }; var XFoo = document.registerElement(“x-foo”, { prototype: XFooPrototype }); [Using a custom element] 1. <x-foo></x-foo> 2. var xFoo = new XFoo(); 3. var xFoo = document.createElement(‘x-foo'); xFoo.foo(); // "foo() called"
  • 16. Shadow DOM • 대상 노드 하위에 숨겨져 있는 DOM subtree • 일반적인 방법으로 내부 접근 불가 • Encapsulation
  • 17. Shadow DOM [Basic Usage] <button>Hello, world!</button> <script> var elButton = document.querySelector(‚button‛); var elShadowRoot = elButton.createShadowRoot(); elShadowRoot.textContent = ‚안녕하세요!‛; </script>
  • 18. <template></template> • 마크업에서 템플릿을 표현 • 초기 페이지 로드 시 영향을 주지 않음 • 비 활성화된 재사용 가능핚 DOM chunk • 사용되기 젂엔 스크립트, 이미지, 오디오 재생 안됨
  • 19. <template></template> <template> <div>Template Sample</div> <script>alert('Thanks!')</script> </template> <button onclick="useIt()">Use me</button> <div id="container"></div> <script> function useIt() { var content = document.querySelector('template').content; document.querySelector('#container') .appendChild(document.importNode(content.querySelector(‘sc ript’), true)); } </script>
  • 20. HTML Import • 다른 문서를 현재 문서에 포함시켜 재사용하는 방법 • 실제로 페이지 DOM에 포함되지 않음 • 페이지 자체를 다른 영역에 두고 관리 • HTML외에 CSS,JS도 가져올 수 있음
  • 21. HTML Import [main.html] <head><link rel="import" href="warnings.html"></head> <body><script> var link = document.querySelector(‚link[rel="import"]‛); var content = link.import; // Grab DOM from warning.html's document. var el = content.querySelector(“.warning”); document.body.appendChild(el.cloneNode(true)); </script></body> [warnings.html] <div class="warning"> <style scoped> h3 { color: red; } </style> <h3>Warning!</h3> <p>This page is under construction</p></div> <div class="outdated"><h3>Heads up!</h3> <p>This content may be out of date</p></div>
  • 22. Web Component 예제 Custom Elements, Shadow DOM, Template Tag, Lifecycle Callback을 활용핚 Web Component 예제 (DEMO)
  • 23. 하지만.. • Custom Elements • Shadow DOM • Template Tag • HTML Import => (All X) => (Chrome,Opera O) => (IE X) => (All X)
  • 24. Polymer.js • Google 에서 개발핚 라이브러리 • Polyfill을 통핚 모든 브라우저에 사용 가능하도록 대응 • Web Component를 쉽게 사용하고 만들도록 도와줌
  • 26. EveryThing is an Element! HTML is cool. DOM feels good. - Polymer Elements - Polymer UI Elements
  • 27. Polymer Elements • UI 렌더링을 하지 않는 유틸리티 엘레먼트 • 기능적인 요소를 담당 • ajax, jsonp, cookie, file, meta..
  • 28. <polymer-ajax> [HTML] <polymer-ajax url="http://gdata.youtube.com/feeds/api/videos/" params='{"alt":"json"}'></polymer-ajax> [JS] var ajax = document.querySelector('polymer-ajax'); ajax.addEventListener('polymer-response', function(e) { console.log(JSON.parse(this.response).feed.entry); }); ajax.go();
  • 29. Polymer UI Elements • 기본적인 UI 컴포넌트 • UI widget 등이 포함 • accordion, breadcrumbs, card, clock, dropdown..
  • 30. Polymer UI Elements • <polymer-ui-clock> (데모보기) • <polymer-ui-card> (데모보기) • <polymer-ui-accordion> (데모보기)
  • 31. Custom elements with Polymer <polymer-element name=“naver-search” attributes=“width height”> <template> <input type=‚text‛ style=‚width:{{width}}px;height:{{height}}px‛ /> <button on-click=‚{{searchBtnClick}}‛>검색</button> </template> <script> Polymer(‚naver-search‛, { width:150, height:30, searchBtnClick: function(e) {…} }); </script> </polymer-element> <naver-search width=‚100‛></naver-search>
  • 32.
  • 33. Why Polymer? • 웹 페이지가 시멘틱해지고 단순해짐 • 모듈화가 잘 되어 있어 사용하기 쉽고 재사용의 이점 • 동작하는 영역이 분리되어 성능 좋음 • Light DOM을 이용, 웹 접근성이 좋음 • 근 미래에 컴포넌트의 표준이 될 가능성 높음
  • 34. • Angular.js, Ember.js, Dart 에 차용될 예정 • 더 나은 웹 생태계를 위해 W3C 표준안으로 채택되도록 끊임없이 연구하고 푸시하는 중 • Experimental? But Web Evolution!! • http://polymer-project.org Future of Polymer.js

Editor's Notes

  1. ----- Meeting Notes (2014. 3. 26. 17:03) -----얘도 마찬가지로 비활성화된 DOM Chunk라 보시면 될 듯 하구요.템플릿과 비슷하게 사용한다고 보시면 될 듯 합니다.