SlideShare une entreprise Scribd logo
1  sur  56
Télécharger pour lire hors ligne
Scalable Vector Ember 
Death to HTML. Long live the DOM.
@mixonic 
httP://madhatted.com 
matt.beale@madhatted.com
201 Created 
We build õ-age apps with Ember.js. We take 
teams from £ to • in no time flat.
1 <svg> 
2 {{#each d in paths}} 
3 <path {{bind-attr d=d}} /> 
4 {{/each}} 
5 </svg>
http://emberjs.jsbin.com/woxes/10/edit 
1.7: http://emberjs.jsbin.com/woxes/9 
! 
1.8: http://emberjs.jsbin.com/woxes/10
Preamble 
Vector Graphics
Raster Graphic (PNG) 
w3.org
Benefits of Raster Graphics 
• Small file-size (photos) 
• Computationally simple to 
render
Vector Graphic (SVG) 
1 <?xml version="1.0" standalone="no"?> 
2 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 
3 "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 
4 <svg width="12cm" height="4cm" viewBox="0 0 1200 400" 
5 xmlns="http://www.w3.org/2000/svg" version="1.1"> 
6 <desc>Example rect01 - rectangle with sharp corners</desc> 
7 
8 <rect x="400" y="100" width="400" height="200" 
9 fill="yellow" stroke="navy" stroke-width="10" /> 
10 </svg> 
w3.org
Benefits of Vector Graphics 
• Small file-size (graphics) 
• Arbitrary resolution
Part I 
Scalable Vector Graphics
Why are we talking about this in 2014?
1998 Vector Markup Language proposed 
by Macromedia, Microsoft. PGML 
proposed by Adobe, Sun. W3C kick off 
SVG. 
2001 SVG 1.0 
2003 SVG 1.1
Benefits of SVG Standard 
• Easy-to-parse metadata 
• Links 
• Animation
1998 Vector Markup Language proposed 
by Macromedia, Microsoft. PGML 
proposed by Adobe, Sun. W3C kick off 
SVG. 
2001 SVG 1.0 
2003 SVG 1.1 
2004 Konqueror 3.2 support 
2005 Gecko (Firefox) support 
2006 WebKit (Chrome, Safari) support
5upmushroom.tumblr.com
1998 Vector Markup Language proposed 
by Macromedia, Microsoft. PGML 
proposed by Adobe, Sun. W3C kick off 
SVG. 
2001 SVG 1.0 
2003 SVG 1.1 
2004 Konqueror 3.2 support 
2005 Gecko (Firefox) support 
2006 WebKit (Chrome, Safari) support 
2011 IE9 is the last platform to support SVG
0.5% Woo! 
(almost) 
w3techs.com
( ๑‾̀◡‾́)σ» 
(´⊙ω⊙`) 
w3techs.com
3 ways to use SVG 
logo.svg 
<svg> 
document.createElementNS
3 ways to use SVG 
logo.svg 
<svg> 
document.createElementNS
Creating elements with a namespace 
1 var svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"); 
2 svg.setAttribute("viewBox", "0 0 1200 400"); 
3 svg.setAttribute("width", "12cm"); 
4 svg.setAttribute("height", "4cm"); 
5 var path = document.createElementNS("http://www.w3.org/2000/svg", "path"); 
6 path.setAttribute("x", "400"); 
7 path.setAttribute("y", "100"); 
8 path.setAttribute("width", "400"); 
9 path.setAttribute("height", "200"); 
10 path.setAttribute("fill", "yellow"); 
11 path.setAttribute("stroke", "navy"); 
12 path.setAttribute("stroke-width", "10"); 
13 svg.appendChild(path); 
14 document.body.appendChild(svg);
Setting SVG attributes 
• Attributes are case sensitive 
1 var div = document.createElement("div"); 
2 div.setAttribute("someWacky", "foo"); 
3 div.getAttribute("someWacky"); // => "foo" 
4 div.getAttribute("somewacky"); // => "foo" 
5 
6 var svg = document.createElementNS(svgNS, "svg"); 
7 svg.setAttribute("someWow", "boo") 
8 svg.getAttribute("someWow"); // => "boo" 
9 svg.getAttribute("somewow"); // => null 
• Property values are not primitives 
1 svg.viewBox; // => SVGAnimatedRect {animVal: SVGRect, baseVal: SVGRect} 
2 var viewBox = new SVGAnimatedRect(); // => TypeError: Illegal constructor 
3 svg.viewBox = "0 0 100 100"; 
4 svg.getAttribute("viewBox"); // => null
Changing namespaces 
1 <div> 
2 <span></span> 
3 <svg> 
4 <path></path> 
5 <foreignObject> 
6 <div></div> 
7 </foreignObject> 
8 </svg> 
9 </div> 
Entrance to namespace dictated by next element 
Exit from namespace dictated by previous element
Part II 
Old Man Ember, Young Man Ember
Handlebars 
HTMLBars
THERE CAN ONLY BE ONE
THERE CAN ONLY BE DECK
A template 
1 <section> 
2 {{if isShowing}} 
3 <span>Howdy!</span> 
4 {{/if}} 
5 </section>
Ember.js pre-1.8 
1 var buffer = "<section>n"; 
2 buffer += "<script metamorph-0-start></script>"; 
3 if (isShowing) { 
4 buffer += " <span>Howdy!</span>n"; 
5 } 
6 buffer += "<script metamorph-0-end></script>"; 
7 buffer += "</section>"; 
8 
9 rootElement.innerHTML = buffer;
Ember.js pre-1.8 
1 var 
2 buffer 
3 if (isShowing) { 
4 buffer 
5 } 
6 buffer 
7 buffer 
8 
9 rootElement.innerHTML 
STRINGS, INNERHTML
Ember.js 1.10 
1 var outerChilden = [document.createElement('section')]; 
2 
3 var innerChildren; 
4 if (isShowing) { 
5 innerChildren = [document.createElement('span');] 
6 innerChildren[0].appendChild(document.createTextNode('Howdy!')); 
7 while (innerChildren[0]) { 
8 outerChilden[0].appendChild(innerChildren[0]); 
9 } 
10 } 
11 
12 while (outerChilden[0]) { 
13 rootElement.appendChild(outerChilden[0]); 
14 }
Ember.js 1.10 
1 var 
2 
3 var 
4 if (isShowing) { 
5 innerChildren 
6 innerChildren[ 
7 while (innerChildren[ 
8 outerChilden[ 
9 } 
10 } 
11 
12 while (outerChilden[ 
13 rootElement.appendChild(outerChilden[ 
14 } 
DOM! HTMLBARS! WOOOMG!
Ember.js 1.8-1.9 
1 var buffer, parsingNode; 
2 
3 buffer = "<section>n</section>"; 
4 parsingNode = document.createElement('div'); 
5 parsingNode.innerHTML = buffer; 
6 var outerChilden = parsingNode.childNodes; 
7 
8 if (isShowing) { 
9 buffer = " <span>Howdy!</span>n"; 
10 parsingNode.innerHTML = buffer; 
11 var innerChildren = parsingNode.childNodes; 
12 while (innerChildren[0]) { 
13 outerChilden[0].appendChild(innerChildren[0]); 
14 } 
15 } 
16 
17 while (outerChilden[0]) { 
18 rootElement.appendChild(outerChilden[0]); 
19 }
Ember.js 1.8-1.9 
1 var 
2 
3 buffer 
4 parsingNode 
5 parsingNode.innerHTML 
6 var 
7 
8 if (isShowing) { 
9 buffer 
10 parsingNode.innerHTML 
11 
12 while (innerChildren[ 
13 outerChilden[ 
14 } 
15 } 
16 
17 while (outerChilden[ 
18 rootElement.appendChild(outerChilden[ 
19 } 
STRING TEMPLATES, DOM for stitching
Tricky stuff in 1.8+ 
• managing a context 
• detecting a namespace 
!
Tricky stuff in 1.8+ 
1 var string = handlebarsTemplate(context, options); 
2 var nodes = domHelper.parseHTML(string, morph.contextualElement); 
3 
4 var node; 
5 while (node = nodes[0]) { 
6 rootElement.appendChild(node); 
7 }
HTMLBARS, Tricky stuff in 1.8+ 
1.10 
1 var nodes = htmlbarsTemplate(context, env, morph.contextualElement); 
2 
3 var node; 
4 while (node = nodes[0]) { 
5 rootElement.appendChild(node); 
6 }
Tricky stuff in 1.8+ 
• managing a context 
• detecting a namespace 
!
Tricky stuff in 1.8+ 
1 var root = document.createElement('div'); 
2 
3 root.innerHTML = "<svg><foreignObject><div></div></foreignObject></svg>"; 
4 
5 var svg = div.firstChild; 
6 var foreignObject = svg.firstChild; 
7 var div = foreignObject.firstChild; 
8 
9 svg.namespaceURI; // http://www.w3.org/2000/svg 
10 foreignObject.namespaceURI; // http://www.w3.org/2000/svg 
11 div.namespaceURI; // undefined
Tricky stuff in 1.8+ 
1 var root = document.createElementNS(svgNs, 'svg');! 
2 ! 
3 root.innerHTML = "<foreignObject><div></div></foreignObject>";! 
4 ! 
5 var foreignObject = root.firstChild;! 
6 var div = foreignObject.firstChild;! 
7 ! 
8 svg.namespaceURI; // http://www.w3.org/2000/svg! 
9 foreignObject.namespaceURI; // http://www.w3.org/2000/svg! 
10 div.namespaceURI; // undefined!
Tricky stuff in 1.8+ HTMLBARS, 1.10 
1 var template = htmlbarsCompile( 
2 "<foreignObject><div></div></foreignObject>" 
3 ); 
4 // so long as contextualElement is an SVG tag... 
5 var nodes = template(context, env, morph.contextualElement); 
6 
7 var foreignObject = nodes[0]; 
8 var div = foreignObject.firstChild; 
9 
10 foreignObject.namespaceURI; // http://www.w3.org/2000/svg 
11 div.namespaceURI; // undefined
Part III 
Death to HTML. Long live the DOM.
HTML is transmitted as a string.
• JS String (.jst, Ember <1.10) 
• HTML (Angular, Polymer) 
• JavaScript (React, Ember > 1.9, 
Mithril)
But that doesn’t mean we should process it as a string.
• innerHTML (.jst, Ember <1.10) 
• DOM (Angular, React, Ember > 1.9, 
Polymer, Mithril)
ACTIONS UP 
! 
BINDINGS DOWN
transmit strings 
! 
process DOM
CONTROLLERS LEFT 
! 
YEHUDA’S RIGHT
Thank you

Contenu connexe

Tendances

HTML5: friend or foe (to Flash)?
HTML5: friend or foe (to Flash)?HTML5: friend or foe (to Flash)?
HTML5: friend or foe (to Flash)?Remy Sharp
 
Rails, Postgres, Angular, and Bootstrap: The Power Stack
Rails, Postgres, Angular, and Bootstrap: The Power StackRails, Postgres, Angular, and Bootstrap: The Power Stack
Rails, Postgres, Angular, and Bootstrap: The Power StackDavid Copeland
 
The DOM is a Mess @ Yahoo
The DOM is a Mess @ YahooThe DOM is a Mess @ Yahoo
The DOM is a Mess @ Yahoojeresig
 
Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)Remy Sharp
 
The Dojo Build System
The Dojo Build SystemThe Dojo Build System
The Dojo Build Systemklipstein
 
the 5 layers of web accessibility - Open Web Camp II
the 5 layers of web accessibility - Open Web Camp IIthe 5 layers of web accessibility - Open Web Camp II
the 5 layers of web accessibility - Open Web Camp IIDirk Ginader
 
Browsers with Wings
Browsers with WingsBrowsers with Wings
Browsers with WingsRemy Sharp
 
jQuery Loves Developers - Oredev 2009
jQuery Loves Developers - Oredev 2009jQuery Loves Developers - Oredev 2009
jQuery Loves Developers - Oredev 2009Remy Sharp
 
Introduction to HTML5
Introduction to HTML5Introduction to HTML5
Introduction to HTML5Adrian Olaru
 
Deploying
DeployingDeploying
Deployingsoon
 
Beyond PHP - it's not (just) about the code
Beyond PHP - it's not (just) about the codeBeyond PHP - it's not (just) about the code
Beyond PHP - it's not (just) about the codeWim Godden
 
2014 database - course 3 - PHP and MySQL
2014 database - course 3 - PHP and MySQL2014 database - course 3 - PHP and MySQL
2014 database - course 3 - PHP and MySQLHung-yu Lin
 
jQuery For Beginners - jQuery Conference 2009
jQuery For Beginners - jQuery Conference 2009jQuery For Beginners - jQuery Conference 2009
jQuery For Beginners - jQuery Conference 2009Ralph Whitbeck
 
[Coscup 2012] JavascriptMVC
[Coscup 2012] JavascriptMVC[Coscup 2012] JavascriptMVC
[Coscup 2012] JavascriptMVCAlive Kuo
 
JS Lab`16. Владимир Воевидка: "Как работает браузер"
JS Lab`16. Владимир Воевидка: "Как работает браузер"JS Lab`16. Владимир Воевидка: "Как работает браузер"
JS Lab`16. Владимир Воевидка: "Как работает браузер"GeeksLab Odessa
 

Tendances (20)

HTML5: friend or foe (to Flash)?
HTML5: friend or foe (to Flash)?HTML5: friend or foe (to Flash)?
HTML5: friend or foe (to Flash)?
 
Rails, Postgres, Angular, and Bootstrap: The Power Stack
Rails, Postgres, Angular, and Bootstrap: The Power StackRails, Postgres, Angular, and Bootstrap: The Power Stack
Rails, Postgres, Angular, and Bootstrap: The Power Stack
 
FuncUnit
FuncUnitFuncUnit
FuncUnit
 
The DOM is a Mess @ Yahoo
The DOM is a Mess @ YahooThe DOM is a Mess @ Yahoo
The DOM is a Mess @ Yahoo
 
Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)
 
Figaro
FigaroFigaro
Figaro
 
Diy frozen snow globe
Diy frozen snow globeDiy frozen snow globe
Diy frozen snow globe
 
The Dojo Build System
The Dojo Build SystemThe Dojo Build System
The Dojo Build System
 
the 5 layers of web accessibility - Open Web Camp II
the 5 layers of web accessibility - Open Web Camp IIthe 5 layers of web accessibility - Open Web Camp II
the 5 layers of web accessibility - Open Web Camp II
 
Browsers with Wings
Browsers with WingsBrowsers with Wings
Browsers with Wings
 
jQuery Loves Developers - Oredev 2009
jQuery Loves Developers - Oredev 2009jQuery Loves Developers - Oredev 2009
jQuery Loves Developers - Oredev 2009
 
Introduction to HTML5
Introduction to HTML5Introduction to HTML5
Introduction to HTML5
 
Elasticsearch Workshop
Elasticsearch WorkshopElasticsearch Workshop
Elasticsearch Workshop
 
Deploying
DeployingDeploying
Deploying
 
jQuery UI and Plugins
jQuery UI and PluginsjQuery UI and Plugins
jQuery UI and Plugins
 
Beyond PHP - it's not (just) about the code
Beyond PHP - it's not (just) about the codeBeyond PHP - it's not (just) about the code
Beyond PHP - it's not (just) about the code
 
2014 database - course 3 - PHP and MySQL
2014 database - course 3 - PHP and MySQL2014 database - course 3 - PHP and MySQL
2014 database - course 3 - PHP and MySQL
 
jQuery For Beginners - jQuery Conference 2009
jQuery For Beginners - jQuery Conference 2009jQuery For Beginners - jQuery Conference 2009
jQuery For Beginners - jQuery Conference 2009
 
[Coscup 2012] JavascriptMVC
[Coscup 2012] JavascriptMVC[Coscup 2012] JavascriptMVC
[Coscup 2012] JavascriptMVC
 
JS Lab`16. Владимир Воевидка: "Как работает браузер"
JS Lab`16. Владимир Воевидка: "Как работает браузер"JS Lab`16. Владимир Воевидка: "Как работает браузер"
JS Lab`16. Владимир Воевидка: "Как работает браузер"
 

Similaire à Scalable vector ember

Everything is Awesome - Cutting the Corners off the Web
Everything is Awesome - Cutting the Corners off the WebEverything is Awesome - Cutting the Corners off the Web
Everything is Awesome - Cutting the Corners off the WebJames Rakich
 
Web Performance Part 4 "Client-side performance"
Web Performance Part 4  "Client-side performance"Web Performance Part 4  "Client-side performance"
Web Performance Part 4 "Client-side performance"Binary Studio
 
Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5
Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5
Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5Sadaaki HIRAI
 
JavaScript performance patterns
JavaScript performance patternsJavaScript performance patterns
JavaScript performance patternsStoyan Stefanov
 
Html5 drupal7 with mandakini kumari(1)
Html5 drupal7 with mandakini kumari(1)Html5 drupal7 with mandakini kumari(1)
Html5 drupal7 with mandakini kumari(1)Mandakini Kumari
 
What you need to know bout html5
What you need to know bout html5What you need to know bout html5
What you need to know bout html5Kevin DeRudder
 
cdac@parag.gajbhiye@test123
cdac@parag.gajbhiye@test123cdac@parag.gajbhiye@test123
cdac@parag.gajbhiye@test123Parag Gajbhiye
 
SAS_Forum_2015_Data_Visualisation_With_HighCharts_D3
SAS_Forum_2015_Data_Visualisation_With_HighCharts_D3SAS_Forum_2015_Data_Visualisation_With_HighCharts_D3
SAS_Forum_2015_Data_Visualisation_With_HighCharts_D3Vasilij Nevlev
 
HTML5 (and friends) - History, overview and current status - jsDay Verona 11....
HTML5 (and friends) - History, overview and current status - jsDay Verona 11....HTML5 (and friends) - History, overview and current status - jsDay Verona 11....
HTML5 (and friends) - History, overview and current status - jsDay Verona 11....Patrick Lauke
 
Ember: Guts & Goals
Ember: Guts & GoalsEmber: Guts & Goals
Ember: Guts & GoalsBob Lail
 
HTML5 on Mobile
HTML5 on MobileHTML5 on Mobile
HTML5 on MobileAdam Lu
 
J query b_dotnet_ug_meet_12_may_2012
J query b_dotnet_ug_meet_12_may_2012J query b_dotnet_ug_meet_12_may_2012
J query b_dotnet_ug_meet_12_may_2012ghnash
 
From Hacker to Programmer (w/ Webpack, Babel and React)
From Hacker to Programmer (w/ Webpack, Babel and React)From Hacker to Programmer (w/ Webpack, Babel and React)
From Hacker to Programmer (w/ Webpack, Babel and React)Joseph Chiang
 

Similaire à Scalable vector ember (20)

Everything is Awesome - Cutting the Corners off the Web
Everything is Awesome - Cutting the Corners off the WebEverything is Awesome - Cutting the Corners off the Web
Everything is Awesome - Cutting the Corners off the Web
 
Web Performance Part 4 "Client-side performance"
Web Performance Part 4  "Client-side performance"Web Performance Part 4  "Client-side performance"
Web Performance Part 4 "Client-side performance"
 
Edge of the Web
Edge of the WebEdge of the Web
Edge of the Web
 
Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5
Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5
Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5
 
JavaScript performance patterns
JavaScript performance patternsJavaScript performance patterns
JavaScript performance patterns
 
HTML 5 - Overview
HTML 5 - OverviewHTML 5 - Overview
HTML 5 - Overview
 
Html5 drupal7 with mandakini kumari(1)
Html5 drupal7 with mandakini kumari(1)Html5 drupal7 with mandakini kumari(1)
Html5 drupal7 with mandakini kumari(1)
 
What you need to know bout html5
What you need to know bout html5What you need to know bout html5
What you need to know bout html5
 
cdac@parag.gajbhiye@test123
cdac@parag.gajbhiye@test123cdac@parag.gajbhiye@test123
cdac@parag.gajbhiye@test123
 
SAS_Forum_2015_Data_Visualisation_With_HighCharts_D3
SAS_Forum_2015_Data_Visualisation_With_HighCharts_D3SAS_Forum_2015_Data_Visualisation_With_HighCharts_D3
SAS_Forum_2015_Data_Visualisation_With_HighCharts_D3
 
HTML5 (and friends) - History, overview and current status - jsDay Verona 11....
HTML5 (and friends) - History, overview and current status - jsDay Verona 11....HTML5 (and friends) - History, overview and current status - jsDay Verona 11....
HTML5 (and friends) - History, overview and current status - jsDay Verona 11....
 
Introduccion a HTML5
Introduccion a HTML5Introduccion a HTML5
Introduccion a HTML5
 
html5
html5html5
html5
 
Html5 For Jjugccc2009fall
Html5 For Jjugccc2009fallHtml5 For Jjugccc2009fall
Html5 For Jjugccc2009fall
 
HTML5
HTML5HTML5
HTML5
 
Ember: Guts & Goals
Ember: Guts & GoalsEmber: Guts & Goals
Ember: Guts & Goals
 
HTML5 on Mobile
HTML5 on MobileHTML5 on Mobile
HTML5 on Mobile
 
J query b_dotnet_ug_meet_12_may_2012
J query b_dotnet_ug_meet_12_may_2012J query b_dotnet_ug_meet_12_may_2012
J query b_dotnet_ug_meet_12_may_2012
 
Html5 intro
Html5 introHtml5 intro
Html5 intro
 
From Hacker to Programmer (w/ Webpack, Babel and React)
From Hacker to Programmer (w/ Webpack, Babel and React)From Hacker to Programmer (w/ Webpack, Babel and React)
From Hacker to Programmer (w/ Webpack, Babel and React)
 

Plus de Matthew Beale

Ember.js Module Loading
Ember.js Module LoadingEmber.js Module Loading
Ember.js Module LoadingMatthew Beale
 
LA Ember.js Meetup, Jan 2017
LA Ember.js Meetup, Jan 2017LA Ember.js Meetup, Jan 2017
LA Ember.js Meetup, Jan 2017Matthew Beale
 
Interoperable Component Patterns
Interoperable Component PatternsInteroperable Component Patterns
Interoperable Component PatternsMatthew Beale
 
Ember Community 2016 - Be the Bark
Ember Community 2016 - Be the BarkEmber Community 2016 - Be the Bark
Ember Community 2016 - Be the BarkMatthew Beale
 
The Hidden Power of HTMLBars (or, Scope in Ember.js Templates)
The Hidden Power of HTMLBars (or, Scope in Ember.js Templates)The Hidden Power of HTMLBars (or, Scope in Ember.js Templates)
The Hidden Power of HTMLBars (or, Scope in Ember.js Templates)Matthew Beale
 
Aligning Ember.js with Web Standards
Aligning Ember.js with Web StandardsAligning Ember.js with Web Standards
Aligning Ember.js with Web StandardsMatthew Beale
 
New Component Patterns in Ember.js
New Component Patterns in Ember.jsNew Component Patterns in Ember.js
New Component Patterns in Ember.jsMatthew Beale
 
Testing Ember Apps: Managing Dependency
Testing Ember Apps: Managing DependencyTesting Ember Apps: Managing Dependency
Testing Ember Apps: Managing DependencyMatthew Beale
 
Parse Apps with Ember.js
Parse Apps with Ember.jsParse Apps with Ember.js
Parse Apps with Ember.jsMatthew Beale
 
Snappy Means Happy: Performance in Ember Apps
Snappy Means Happy: Performance in Ember AppsSnappy Means Happy: Performance in Ember Apps
Snappy Means Happy: Performance in Ember AppsMatthew Beale
 
Client-side Auth with Ember.js
Client-side Auth with Ember.jsClient-side Auth with Ember.js
Client-side Auth with Ember.jsMatthew Beale
 
Containers & Dependency in Ember.js
Containers & Dependency in Ember.jsContainers & Dependency in Ember.js
Containers & Dependency in Ember.jsMatthew Beale
 
Complex Architectures in Ember
Complex Architectures in EmberComplex Architectures in Ember
Complex Architectures in EmberMatthew Beale
 
Ember and containers
Ember and containersEmber and containers
Ember and containersMatthew Beale
 

Plus de Matthew Beale (15)

Ember.js Module Loading
Ember.js Module LoadingEmber.js Module Loading
Ember.js Module Loading
 
LA Ember.js Meetup, Jan 2017
LA Ember.js Meetup, Jan 2017LA Ember.js Meetup, Jan 2017
LA Ember.js Meetup, Jan 2017
 
Interoperable Component Patterns
Interoperable Component PatternsInteroperable Component Patterns
Interoperable Component Patterns
 
Ember Community 2016 - Be the Bark
Ember Community 2016 - Be the BarkEmber Community 2016 - Be the Bark
Ember Community 2016 - Be the Bark
 
Attribute actions
Attribute actionsAttribute actions
Attribute actions
 
The Hidden Power of HTMLBars (or, Scope in Ember.js Templates)
The Hidden Power of HTMLBars (or, Scope in Ember.js Templates)The Hidden Power of HTMLBars (or, Scope in Ember.js Templates)
The Hidden Power of HTMLBars (or, Scope in Ember.js Templates)
 
Aligning Ember.js with Web Standards
Aligning Ember.js with Web StandardsAligning Ember.js with Web Standards
Aligning Ember.js with Web Standards
 
New Component Patterns in Ember.js
New Component Patterns in Ember.jsNew Component Patterns in Ember.js
New Component Patterns in Ember.js
 
Testing Ember Apps: Managing Dependency
Testing Ember Apps: Managing DependencyTesting Ember Apps: Managing Dependency
Testing Ember Apps: Managing Dependency
 
Parse Apps with Ember.js
Parse Apps with Ember.jsParse Apps with Ember.js
Parse Apps with Ember.js
 
Snappy Means Happy: Performance in Ember Apps
Snappy Means Happy: Performance in Ember AppsSnappy Means Happy: Performance in Ember Apps
Snappy Means Happy: Performance in Ember Apps
 
Client-side Auth with Ember.js
Client-side Auth with Ember.jsClient-side Auth with Ember.js
Client-side Auth with Ember.js
 
Containers & Dependency in Ember.js
Containers & Dependency in Ember.jsContainers & Dependency in Ember.js
Containers & Dependency in Ember.js
 
Complex Architectures in Ember
Complex Architectures in EmberComplex Architectures in Ember
Complex Architectures in Ember
 
Ember and containers
Ember and containersEmber and containers
Ember and containers
 

Dernier

IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsRoshan Dwivedi
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 

Dernier (20)

IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 

Scalable vector ember

  • 1. Scalable Vector Ember Death to HTML. Long live the DOM.
  • 3. 201 Created We build õ-age apps with Ember.js. We take teams from £ to • in no time flat.
  • 4. 1 <svg> 2 {{#each d in paths}} 3 <path {{bind-attr d=d}} /> 4 {{/each}} 5 </svg>
  • 6.
  • 8.
  • 10. Benefits of Raster Graphics • Small file-size (photos) • Computationally simple to render
  • 11. Vector Graphic (SVG) 1 <?xml version="1.0" standalone="no"?> 2 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 3 "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 4 <svg width="12cm" height="4cm" viewBox="0 0 1200 400" 5 xmlns="http://www.w3.org/2000/svg" version="1.1"> 6 <desc>Example rect01 - rectangle with sharp corners</desc> 7 8 <rect x="400" y="100" width="400" height="200" 9 fill="yellow" stroke="navy" stroke-width="10" /> 10 </svg> w3.org
  • 12. Benefits of Vector Graphics • Small file-size (graphics) • Arbitrary resolution
  • 13. Part I Scalable Vector Graphics
  • 14. Why are we talking about this in 2014?
  • 15. 1998 Vector Markup Language proposed by Macromedia, Microsoft. PGML proposed by Adobe, Sun. W3C kick off SVG. 2001 SVG 1.0 2003 SVG 1.1
  • 16. Benefits of SVG Standard • Easy-to-parse metadata • Links • Animation
  • 17. 1998 Vector Markup Language proposed by Macromedia, Microsoft. PGML proposed by Adobe, Sun. W3C kick off SVG. 2001 SVG 1.0 2003 SVG 1.1 2004 Konqueror 3.2 support 2005 Gecko (Firefox) support 2006 WebKit (Chrome, Safari) support
  • 19. 1998 Vector Markup Language proposed by Macromedia, Microsoft. PGML proposed by Adobe, Sun. W3C kick off SVG. 2001 SVG 1.0 2003 SVG 1.1 2004 Konqueror 3.2 support 2005 Gecko (Firefox) support 2006 WebKit (Chrome, Safari) support 2011 IE9 is the last platform to support SVG
  • 20. 0.5% Woo! (almost) w3techs.com
  • 22. 3 ways to use SVG logo.svg <svg> document.createElementNS
  • 23. 3 ways to use SVG logo.svg <svg> document.createElementNS
  • 24. Creating elements with a namespace 1 var svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"); 2 svg.setAttribute("viewBox", "0 0 1200 400"); 3 svg.setAttribute("width", "12cm"); 4 svg.setAttribute("height", "4cm"); 5 var path = document.createElementNS("http://www.w3.org/2000/svg", "path"); 6 path.setAttribute("x", "400"); 7 path.setAttribute("y", "100"); 8 path.setAttribute("width", "400"); 9 path.setAttribute("height", "200"); 10 path.setAttribute("fill", "yellow"); 11 path.setAttribute("stroke", "navy"); 12 path.setAttribute("stroke-width", "10"); 13 svg.appendChild(path); 14 document.body.appendChild(svg);
  • 25. Setting SVG attributes • Attributes are case sensitive 1 var div = document.createElement("div"); 2 div.setAttribute("someWacky", "foo"); 3 div.getAttribute("someWacky"); // => "foo" 4 div.getAttribute("somewacky"); // => "foo" 5 6 var svg = document.createElementNS(svgNS, "svg"); 7 svg.setAttribute("someWow", "boo") 8 svg.getAttribute("someWow"); // => "boo" 9 svg.getAttribute("somewow"); // => null • Property values are not primitives 1 svg.viewBox; // => SVGAnimatedRect {animVal: SVGRect, baseVal: SVGRect} 2 var viewBox = new SVGAnimatedRect(); // => TypeError: Illegal constructor 3 svg.viewBox = "0 0 100 100"; 4 svg.getAttribute("viewBox"); // => null
  • 26. Changing namespaces 1 <div> 2 <span></span> 3 <svg> 4 <path></path> 5 <foreignObject> 6 <div></div> 7 </foreignObject> 8 </svg> 9 </div> Entrance to namespace dictated by next element Exit from namespace dictated by previous element
  • 27. Part II Old Man Ember, Young Man Ember
  • 29. THERE CAN ONLY BE ONE
  • 30.
  • 31. THERE CAN ONLY BE DECK
  • 32.
  • 33. A template 1 <section> 2 {{if isShowing}} 3 <span>Howdy!</span> 4 {{/if}} 5 </section>
  • 34. Ember.js pre-1.8 1 var buffer = "<section>n"; 2 buffer += "<script metamorph-0-start></script>"; 3 if (isShowing) { 4 buffer += " <span>Howdy!</span>n"; 5 } 6 buffer += "<script metamorph-0-end></script>"; 7 buffer += "</section>"; 8 9 rootElement.innerHTML = buffer;
  • 35. Ember.js pre-1.8 1 var 2 buffer 3 if (isShowing) { 4 buffer 5 } 6 buffer 7 buffer 8 9 rootElement.innerHTML STRINGS, INNERHTML
  • 36. Ember.js 1.10 1 var outerChilden = [document.createElement('section')]; 2 3 var innerChildren; 4 if (isShowing) { 5 innerChildren = [document.createElement('span');] 6 innerChildren[0].appendChild(document.createTextNode('Howdy!')); 7 while (innerChildren[0]) { 8 outerChilden[0].appendChild(innerChildren[0]); 9 } 10 } 11 12 while (outerChilden[0]) { 13 rootElement.appendChild(outerChilden[0]); 14 }
  • 37. Ember.js 1.10 1 var 2 3 var 4 if (isShowing) { 5 innerChildren 6 innerChildren[ 7 while (innerChildren[ 8 outerChilden[ 9 } 10 } 11 12 while (outerChilden[ 13 rootElement.appendChild(outerChilden[ 14 } DOM! HTMLBARS! WOOOMG!
  • 38. Ember.js 1.8-1.9 1 var buffer, parsingNode; 2 3 buffer = "<section>n</section>"; 4 parsingNode = document.createElement('div'); 5 parsingNode.innerHTML = buffer; 6 var outerChilden = parsingNode.childNodes; 7 8 if (isShowing) { 9 buffer = " <span>Howdy!</span>n"; 10 parsingNode.innerHTML = buffer; 11 var innerChildren = parsingNode.childNodes; 12 while (innerChildren[0]) { 13 outerChilden[0].appendChild(innerChildren[0]); 14 } 15 } 16 17 while (outerChilden[0]) { 18 rootElement.appendChild(outerChilden[0]); 19 }
  • 39. Ember.js 1.8-1.9 1 var 2 3 buffer 4 parsingNode 5 parsingNode.innerHTML 6 var 7 8 if (isShowing) { 9 buffer 10 parsingNode.innerHTML 11 12 while (innerChildren[ 13 outerChilden[ 14 } 15 } 16 17 while (outerChilden[ 18 rootElement.appendChild(outerChilden[ 19 } STRING TEMPLATES, DOM for stitching
  • 40. Tricky stuff in 1.8+ • managing a context • detecting a namespace !
  • 41. Tricky stuff in 1.8+ 1 var string = handlebarsTemplate(context, options); 2 var nodes = domHelper.parseHTML(string, morph.contextualElement); 3 4 var node; 5 while (node = nodes[0]) { 6 rootElement.appendChild(node); 7 }
  • 42. HTMLBARS, Tricky stuff in 1.8+ 1.10 1 var nodes = htmlbarsTemplate(context, env, morph.contextualElement); 2 3 var node; 4 while (node = nodes[0]) { 5 rootElement.appendChild(node); 6 }
  • 43. Tricky stuff in 1.8+ • managing a context • detecting a namespace !
  • 44. Tricky stuff in 1.8+ 1 var root = document.createElement('div'); 2 3 root.innerHTML = "<svg><foreignObject><div></div></foreignObject></svg>"; 4 5 var svg = div.firstChild; 6 var foreignObject = svg.firstChild; 7 var div = foreignObject.firstChild; 8 9 svg.namespaceURI; // http://www.w3.org/2000/svg 10 foreignObject.namespaceURI; // http://www.w3.org/2000/svg 11 div.namespaceURI; // undefined
  • 45. Tricky stuff in 1.8+ 1 var root = document.createElementNS(svgNs, 'svg');! 2 ! 3 root.innerHTML = "<foreignObject><div></div></foreignObject>";! 4 ! 5 var foreignObject = root.firstChild;! 6 var div = foreignObject.firstChild;! 7 ! 8 svg.namespaceURI; // http://www.w3.org/2000/svg! 9 foreignObject.namespaceURI; // http://www.w3.org/2000/svg! 10 div.namespaceURI; // undefined!
  • 46. Tricky stuff in 1.8+ HTMLBARS, 1.10 1 var template = htmlbarsCompile( 2 "<foreignObject><div></div></foreignObject>" 3 ); 4 // so long as contextualElement is an SVG tag... 5 var nodes = template(context, env, morph.contextualElement); 6 7 var foreignObject = nodes[0]; 8 var div = foreignObject.firstChild; 9 10 foreignObject.namespaceURI; // http://www.w3.org/2000/svg 11 div.namespaceURI; // undefined
  • 47. Part III Death to HTML. Long live the DOM.
  • 48. HTML is transmitted as a string.
  • 49. • JS String (.jst, Ember <1.10) • HTML (Angular, Polymer) • JavaScript (React, Ember > 1.9, Mithril)
  • 50.
  • 51. But that doesn’t mean we should process it as a string.
  • 52. • innerHTML (.jst, Ember <1.10) • DOM (Angular, React, Ember > 1.9, Polymer, Mithril)
  • 53. ACTIONS UP ! BINDINGS DOWN
  • 54. transmit strings ! process DOM
  • 55. CONTROLLERS LEFT ! YEHUDA’S RIGHT