Slide 1

Slide 1 text

WEB COMPONENTS AKA magic!

Slide 2

Slide 2 text

HELLO I'm Ruth UX, Design, Front End Dev @rumyra Work in The Lab at O2

Slide 3

Slide 3 text

BUT WHAT IS A WEB COMPONENT? Sandboxed Reuseable DOM Structure You what now?

Slide 4

Slide 4 text

IMAGINE IF YOU WILL HTML CSS Result Edit on < d i v c l a s s = " t w e l v e - d e v s - n a v " > < d i v c l a s s = " b a d g e - o u t e r " > < b > < / b > < b > < / b > < b > < / b > < b > < / b > < b > < / b > < b > < / b > < b > < / b > < b > < / b >

Slide 5

Slide 5 text

< t w e l v e - d e v s - l o g o > < / t w e l v e - d e v s - l o g o >

Slide 6

Slide 6 text

TEMPLATES < t e m p l a t e > Content to be used later Parsed but inert

Slide 7

Slide 7 text

< t e m p l a t e i d = " t w e l v e - d e v s - n a v " > < d i v c l a s s = " t w e l v e - d e v s - n a v " > < d i v c l a s s = " b a d g e - o u t e r " > < b > < / b > < b > < / b > < b > < / b > < b > < / b > < b > < / b > < b > < / b > < b > < / b > < b > < / b > < b > < / b > < b > < / b > < b > < / b > < / d i v > < n a v > < a h r e f = " / h o m e " > < s p a n > 1 < / s p a n > < s p a n > 2 < / s p a n > < s p a n > d < / s p a n > < s p a n > e < / s p a n > < s p a n > v < / s p a n > < s p a n > s < / s p a n > < s p a n > . < / s p a n > < s p a n > c < / s p a n > < s p a n > o < / s p a n > < s p a n > . < / s p a n > < s p a n > u < / s p a n > < s p a n > k < / s p a n > < / a > < a h r e f = " / w o r k s h o p s " >

Slide 8

Slide 8 text

CONTENT API / / t a r g e t t e m p l a t e v a r l o g o T e m p l a t e = d o c u m e n t . q u e r y S e l e c t o r ( ' # t w e l v e - d e v s - l o g o ' ) ; / / g e t & c l o n e c o n t e n t v a r l o g o C o n t e n t = l o g o T e m p l a t e . c o n t e n t . c l o n e N o d e ( t r u e ) ; / / a p p e n d t o s e e n e l e m e n t d o c u m e n t . q u e r y S e l e c t o r ( ' # s h o w - c o n t e n t ' ) . a p p e n d C h i l d ( l o g o C o n t e n t ) ;

Slide 9

Slide 9 text

THE SHADOW DOM

Slide 10

Slide 10 text

MAGIC

Slide 11

Slide 11 text

WE NEED Shadow Host Shadow Root / / g e t l o g o m a r k u p v a r l o g o T e m p l a t e = d o c u m e n t . q u e r y S e l e c t o r ( ' # t w e l v e - d e v s - l o g o ' ) ; / / c l o n e i t ( c o n t e n t a p i ) v a r l o g o C o n t e n t = l o g o T e m p l a t e . c o n t e n t . c l o n e N o d e ( t r u e ) ; / / c r e a t e s h a d o w h o s t v a r s h a d o w H o s t = d o c u m e n t . q u e r y S e l e c t o r ( ' # s h o w - c o n t e n t ' ) ; / / c r e a t e s h a d o w r o o t v a r s h a d o w R o o t = s h a d o w H o s t . w e b k i t C r e a t e S h a d o w R o o t ( ) ; / / a d d m a r k u p t o r o o t s h a d o w R o o t . a p p e n d C h i l d ( l o g o C o n t e n t ) ;

Slide 12

Slide 12 text

HANG ON A MINUTE... ^^ Shadow Boundary

Slide 13

Slide 13 text

< d i v i d = " l o g o " >

Slide 14

Slide 14 text

CUSTOM ELEMENTS FTW! Enable Chrome flag 'Experimental Web Platform Features' Creates a prototype Register the element

Slide 15

Slide 15 text

CREATE HTML ELEMENT PROTOTYPE v a r t w e l v e D e v s N a v P r o t o = O b j e c t . c r e a t e ( H T M L E l e m e n t . p r o t o t y p e ) ;

Slide 16

Slide 16 text

CREATE CALLBACK c r e a t e C a l l b a c k method t w e l v e D e v s N a v P r o t o . c r e a t e d C a l l b a c k = f u n c t i o n ( ) { v a r s h a d o w R o o t = t h i s . w e b k i t C r e a t e S h a d o w R o o t ( ) ; s h a d o w R o o t . a p p e n d C h i l d ( l o g o C o n t e n t ) ; } ;

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

I wrote it all down http://12devsofxmas.co.uk/2013/12/day-4- lets-make-a-web-component/ Mozilla Brick Google Polymer Mokey Patch Polyfill THANK YOU ALL THE INFO! This is going to change