Slide 1

Slide 1 text

PLATFORM STATE OF THE UNION

Slide 2

Slide 2 text

HTML-First HIGHLIGHT #1 For the ambitious markup developer.

Slide 6

Slide 6 text

AN EMBER DEV'S GUIDE TO CSS GRID TOMORROW AT 1:30 PM · WITH JAMES STEINBACH

Slide 15

Slide 15 text

Slide 16

Slide 16 text

RFC #311 Angle Bracket Invocation

Slide 17

Slide 17 text

{{yield}}

Slide 18

Slide 18 text

{{yield to="header"}} RFC #460 Yieldable Named Blocks soon!

Slide 19

Slide 19 text

{{#if @isAdmin}} Delete"#button> {{/if}}

Slide 20

Slide 20 text

{{#if (or @isAuthor @isAdmin)}} Delete"#button> {{/if}} RFC #562 Adding Logical Operators To Templates soon!

Slide 21

Slide 21 text

z

Slide 22

Slide 22 text

HTML-First HIGHLIGHT #1 For the ambitious markup developer.

Slide 23

Slide 23 text

OCTANE: A PARADIGM SHIFT IN EMBERJS TODAY AT 11:30 AM · WITH SUCHITA DOSHI

Slide 24

Slide 24 text

Integrating JavaScript HIGHLIGHT #2 E!ortless reactivity.

Slide 28

Slide 28 text

import Component from '@glimmer/component'; export default class ShareButtonComponent extends Component { get shareURL() { let url = new URL('https:"$twitter.com/intent/tweet'); url.searchParams.set('url', window.location.href); if (this.args.text) { url.searchParams.set('text', this.args.text); } if (this.args.hashtags) { url.searchParams.set('hashtags', this.args.hashtags); } if (this.args.via) { url.searchParams.set('via', this.args.via); } return url; } } app/components/share-button.js

Slide 29

Slide 29 text

import Component from '@glimmer/component'; import { tracked } from '@glimmer/tracking'; export default class RentalImageComponent extends Component { @tracked isLarge = false; toggleSize() { this.isLarge = !this.isLarge; } } app/components/rental/image.js {{#if this.isLarge}} View Smaller"#small> "#div> {{else}} View Larger"#small> "#div> {{/if}} app/components/rental/image.hbs

Slide 30

Slide 30 text

import Component from '@glimmer/component'; import { tracked } from '@glimmer/tracking'; export default class RentalImageComponent extends Component { @tracked isLarge = false; toggleSize() { this.isLarge = !this.isLarge; } } app/components/rental/image.js {{#if this.isLarge}} View Smaller"#small> "#div> {{else}} View Larger"#small> "#div> {{/if}} app/components/rental/image.hbs

Slide 31

Slide 31 text

AUTOTRACKING: REACTIVITY AND STATE IN MODERN EMBER TOMORROW AT 9:30 AM · WITH CHRIS GARRETT

Slide 32

Slide 32 text

Working
 With The DOM HIGHLIGHT #3 Interactions made simple.

Slide 36

Slide 36 text

import Component from '@glimmer/component'; import { tracked } from '@glimmer/tracking'; import { action } from '@ember/object'; export default class RentalImageComponent extends Component { @tracked isLarge = false; @action toggleSize() { this.isLarge = !this.isLarge; } } app/components/rental/image.js {{#if this.isLarge}} View Smaller"#small> "#div> {{else}} View Larger"#small> "#div> {{/if}} app/components/rental/image.hbs {{on "click" this.toggleSize}} {{on "click" this.toggleSize}}

Slide 40

Slide 40 text

"#div> Where would you like to stay?"#span>

Slide 42

Slide 42 text

{{!!% uses @ember/render-modifiers addon !%}}
({ radius: Math.random() * 12 + 4 })), root = nodes[0], color = d3.scale.category10(); root.radius = 0; root.fixed = true; let force = d3.layout.force() .gravity(0.05) .charge(function(d, i) { return i ? 0 : -2000; }) .nodes(nodes) .size([width, height]); force.start();

Slide 43

Slide 43 text

{{!!% uses ember-ref-modifier addon !%}}
Play"#button> "#div> app/components/video-player.hbs import Component from '@glimmer/component'; import { action } from '@ember/object'; export default class VideoPlayerComponent extends Component { @action play() { } } app/components/video-player.js !$ !!&? />

Slide 44

Slide 44 text

{{!!% uses ember-ref-modifier addon !%}}
Play"#button> "#div> app/components/video-player.hbs import Component from '@glimmer/component'; import { action } from '@ember/object'; export default class VideoPlayerComponent extends Component { @action play() { } } app/components/video-player.js !$ !!&? /> {{ref this "videoElement"}}

Slide 45

Slide 45 text

{{!!% uses ember-ref-modifier addon !%}}
Play"#button> "#div> app/components/video-player.hbs import Component from '@glimmer/component'; import { action } from '@ember/object'; export default class VideoPlayerComponent extends Component { @action play() { } } app/components/video-player.js /> {{ref this "videoElement"}} this.videoElement.play();

Slide 46

Slide 46 text

Working
 With The DOM HIGHLIGHT #3 Interactions made simple.

Slide 47

Slide 47 text

Into The Future WHAT'S NEXT? Building Ember, together.

Slide 48

Slide 48 text

EMBERJS 2019-2020 ROADMAP Invest in Octane Modernize our build system Better accessibility by default Share Octane outside our community

Slide 49

Slide 49 text

WHY JS IS COMING TO EMBER TEMPLATES TODAY AT 5:00 PM · WITH MATTHEW BEALE

Slide 50

Slide 50 text

“Compiling Ember” by Edward Faulkner

Slide 51

Slide 51 text

BUILDING EMBERJS TOGETHER Get involved Issues, PRs and RFCs Addons and tooling Teaching and outreach

Slide 52

Slide 52 text

WHY CONTRIBUTING SEEMS SCARY TOMORROW AT 5:00 PM · WITH ANNE-GREETH VAN HERWIJNEN

Slide 53

Slide 53 text

No content

Slide 54

Slide 54 text

Melanie Sumner We are building it together. We are the together framework.

Slide 55

Slide 55 text

No content

Slide 56

Slide 56 text

No content